深入聊一聊Angular开发的内容

目录
  • 前言
  • 组件 Component
  • 路由 Router
  • 管道 Pipeline
  • 指令 Directive
  • 服务 Service
  • 总结

前言

阅读本文,是在你了解 Angular 基本知识的前提下,如果读者还不了解,请前往官网了解。

如果读者有 vue 或者 React 的开发经验,会很好理解接下来讲解的内容~

组件 Component

团队开发都有自己的约定。我们这里约定 app/pages 目录下的组件是页面组件,其页面组件下的 components 是页面组件的私有组件。app/components 是公有组件。

现在我们新建一个用户的列表页面。

mkdir pages 后,直接进入 pages 目录执行 ng generate component user-list 创建用户列表。你会得到下面的目录:

user-list
├── user-list.component.html                          // 页面骨架
├── user-list.component.scss                          // 页面独有样式
├── user-list.component.spec.ts                       // 测试文件
└── user-list.component.ts                            // javascript 文件

使用命令行生成组件的好处是,它会自动在 app.module.ts 中声明本组件 UserListComponent,而不需要手动去操作。

如果你重复去新建一个组件,则脚手架不会执行,不用害怕在同一个地方有重复的组件出现

路由 Router

不同的路由,表示你访问不同的页面组件。这在 app-routing.module.ts 中去添加。

首先你要引入页面组件:

import { UserListComponent } from './pages/user-list/user-list.component';

之后添加路由:

const routes: Routes = [{
  path: "user-list",
  component: UserListComponent
}];

为了方便演示,只保留 app.component.html 内容 <router-outlet></router-outlet>

这样浏览器进入路径 http://localhost:4200/user-list 就可以看到效果了。

默认的是 history 模式,如果你要改为 hash 模式的话,可以修改 app-routing.module.ts 内容如下:

import { NgModule } from '@angular/core';
import { RouterModule, Routes, PreloadAllModules } from '@angular/router';
import { UserListComponent } from './pages/user-list/user-list.component';

const routes: Routes = [{
  path: "user-list",
  component: UserListComponent
}];

@NgModule({
  imports: [RouterModule.forRoot(
    routes,
    {
      useHash: true,// 使用 hash 模式
      preloadingStrategy: PreloadAllModules
    }
  )],
  exports: [RouterModule]
})
export class AppRoutingModule { }

此时,你访问的路由应该是 http://localhost:4200/#/user-list。

管道 Pipeline

管道你可以理解为过滤器。用过 vue 的读者应该对这个不默认。

Angular 有默认的管道元件,比如:

  • UpperCase
  • LowerCase
  • Currency 货币
  • PercentPipe
  • DatePipe
  • JsonPipe
  • SlicePipe

使用也很简单:

<p>{{ uppercase_var|uppercase }}</p>
<p>{{ lowercase_var|lowercase }}</p>
<p>{{ currency_var|currency:"CNY":"symbol" }}</p>
<p>{{ percent_var|percent }}</p>
<p>{{ date_var|date:'yyyy-MM-dd HH:mm:ss' }}</p>
<p>{{ json_var|json }}</p>
<p>{{ slice_var|slice:0:9 }}</p>

当然,你还可以自定义管道。

我们在 app 目录下 mkdir pipes 文件夹统一管理管道元件。

ng generate pipe get-first-character 命令行创建一个获取第一个字符的管道,也会自动在 app.module.ts 中声明 GetFirstCharacterPipe(驼峰式)管道,很是方便。因为这里的功能比较简单,我们简单修改下 get-first-character.pipe.ts 文件就很满足要求了。

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'getFirstCharacter'
})
export class GetFirstCharacterPipe implements PipeTransform {
  transform(value: string, ...args: unknown[]): unknown {
    return value.slice(0, 1);
  }
}

调用如下:

<p>{{ string_var|getFirstCharacter }}</p>

Easy, Right?

指令 Directive

可以理解为指令是对控制器的补充,主要功能是对Dom元素和数据的操作,已有的指令,如:ngModel,这些指令直接到官网上查看就可以了,比较简单。

下面我们说的是自定义的指令。

老样子,我们进入 app 目录,mkdir directives 文件夹统一管理指令。

ng generate directive directive_console 创建一个输出的指令,也会自动在 app.module.ts 中声明 DirectiveConsoleDirective(驼峰式)管道,很是方便。此文件的内容如下:

import { Directive, ElementRef, HostListener } from '@angular/core';

@Directive({
  selector: '[appDirectiveConsole]'
})
export class DirectiveConsoleDirective {

  constructor(
    public elementRef: ElementRef
  ) { }

  @HostListener('keyup', ['$event.target'])
  keyupFunction(event: any) {
    if(event.value) {
      console.log(this.elementRef)
      this.elementRef.nativeElement.value = event.value.trim()
    }
  }
}

我们在 user-list.component.html 中新增:

<input type="text" id="name" appDirectiveConsole>

那么会有下面这种效果:

后面的章节会展开说指令

服务 Service

服务,你可以理解为请求 api 的地方,那也不错,但是不仅仅有这么个用处,在后面的章节会展开说。

那么我们把它当成处理 api 的地方吧。

进入 app 目录,mkdir services 文件夹统一管理服务。

ng generate service service_demo 创建一个 demo 数据的服务。

我们在 assets 文件夹下创建一个 demo.json 文件:

{
  "name": "Jimmy"
}

下面我们对 service-demo.service.ts 进行方法的编写,通过 http 获取 demo.json 数据。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class ServiceDemoService {

  constructor(
    private http: HttpClient
  ) { }

  // 获取 demo.json 数据
  getDemo() {
    return this.http.get('assets/demo.json', {
      responseType: 'json',
      params: {}
    })
  }
}

之后,我们在 user-list.component.ts 文件中调用下:

import { Component, OnInit } from '@angular/core';
import { ServiceDemoService } from 'src/app/services/service-demo.service';

@Component({
  selector: 'app-user-list',
  templateUrl: './user-list.component.html',
  styleUrls: ['./user-list.component.scss']
})
export class UserListComponent implements OnInit {

  public name:string = '';

  constructor(
    private demoService: ServiceDemoService
  ) { }

  ngOnInit(): void {
    this.demoService.getDemo().subscribe({
      next: (data: any) => {
        this.name = data.name
      },
      error: () => {}
    })
  }
}

上面用到了 http 的相关服务,你必须在 app.module.ts 中引入其模块才行的哦。

import { HttpClientModule } from '@angular/common/http';
// ...

@NgModule({
  imports: [
    HttpClientModule
  ],
  //...
})

运行之后,如下图:

嗯~

整体熟悉下来,你想基本 hold 住 angular 开发单页面系统,还需要你在官网中看下基本的语法,毕竟基本的语法在这里也没什么好说的。

总结

到此这篇关于Angular开发内容的文章就介绍到这了,更多相关Angular开发的内容内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Angular开发中的登陆与身份验证

    前言 由于 Angular 是单页应用,会在一开始,就把大部分的资源加载到浏览器中,所以就更需要注意验证的时机,并保证只有通过了验证的用户才能看到对应的界面. 本篇文章中的身份验证,指的是如何确定用户是否已经登陆,并确保在每次与服务器的通信中,都能够满足服务器的验证需求.注意,并不包括对具体是否具有某一个权限的判断. 对于登陆,主要是接受用户的用户名密码输入,提交到服务器进行验证,处理验证响应,在浏览器端构建身份验证数据. 实现身份验证的两种方式 目前,实现身份验证的方法,主要有两个大类: Co

  • 总结AngularJS开发者最常犯的十个错误

    前言 AngularJS易于开发.较多的特征及较好的效果导致了较多的应用,伴随而来的是一些陷阱.本文列举了AngularJS的一些共同的易于出问题的地方,下面来一起看看吧. 一.MVC目录结构 AngularJS,直白地说,就是一个MVC框架.它的模型并没有像backbone.js框架那样定义的如此明确,但它的体系结构却恰如其分.当你工作于一个MVC框架时,普遍的做法是根据文件类型对其进行归类: templates/ _login.html _feed.html app/ app.js cont

  • 浅谈Angular7 项目开发总结

    由于公司需要,开始学习angular,这个传闻中学习曲线及其陡峭的前端框架,并开始写第一个用angular的项目,截止今天初步完成现有需求,顾在此做一次遇到问题的总结,以便知识的掌握. 一.在angular项目中,如何使用锚点 在常规项目中,使用锚点用来做"智能"定位效果时,只需这么写: <a href="#test" rel="external nofollow" >走你</a> <div id="tes

  • Angular2从搭建环境到开发步骤详解

    Angular-CLI 说到 cli 大家不陌生,每出一个框架都会有对应的 cli ,俗称脚手架.angular2 本身提供了起步项目 angular2-quickstart,我尝试了一下,发现不是很好用,其它的大部分扩展需要自行安装,之后看了一下 angular-cli 部署简单易用,还提供了快捷搭建项目的目录. 安装 首先,最好先升级 node 到 6.x 可以避免 node 版本过低带来的不必要的麻烦. npm install -g angular-cli 用法 ng --help 查看所

  • 深入聊一聊Angular开发的内容

    目录 前言 组件 Component 路由 Router 管道 Pipeline 指令 Directive 服务 Service 总结 前言 阅读本文,是在你了解 Angular 基本知识的前提下,如果读者还不了解,请前往官网了解. 如果读者有 vue 或者 React 的开发经验,会很好理解接下来讲解的内容- 组件 Component 团队开发都有自己的约定.我们这里约定 app/pages 目录下的组件是页面组件,其页面组件下的 components 是页面组件的私有组件.app/compo

  • 详解Angular 开发环境搭建

    Angular 是一款开源 JavaScript 框架,由Google 维护,用来协助单一页面应用程序运行的.它的目标是增强基于浏览器的应用,使开发和测试变得更加容易.目前最新的 Angular 版本是 v4.2.3 开始搭建 Angular 开发环境 搭建 Angular 开发环境需要的步骤: Node.js 配置 npm Angular CLI 安装 Node.js 下载安装Node.js,下载最新的 LTS 版本即可,目前最新的版本是 v6.11.0 LTS 配置 npm 安装好 Node

  • Angular 开发学习之Angular CLI的安装使用

    前面我们已经准备好开发环境,现在可以正式开发了.正如前面提到的,Angular 提供了一个命令行工具,可以简化我们的程序开发.我们今后的开发也会使用这一工具,因此我们需要首先安装这个名为 Angular CLI 的开发工具. 安装 CLI 的过程很简单,与安装其它工具.甚至是安装一个普通开发包没什么区别.我们前面已经配置好 NPM Registry.安装成功 yarn,那么就使用 yarn 来安装这个工具.具体的命令是: yarn global add @angular/cli 参数 globa

  • Angular开发实践之服务端渲染

    Angular Universal Angular在服务端渲染方面提供一套前后端同构解决方案,它就是Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术. 标准的 Angular 应用会执行在浏览器中,它会在 DOM 中渲染页面,以响应用户的操作. 而 Angular Universal 会在服务端通过一个被称为服务端渲染(server-side rendering - SSR)的过程生成静态的应用页面. 它可以生成这些页面,并在浏览器请求时直接用它们给出

  • Php Ctemplate引擎开发相关内容

    1.简介 也许你对Php Ctemplate不了,解甚看到这个名词,只知道它的前半部分是一种编程语言.没有关系让我来给大家介绍一下这个基于php语言的标签模版引擎(请允许我这样去翻译这套web开发解决方案,尽管我可能翻译的不准确). 先简短说一下他的历史.了解Php Ctemplate先要知道Ctempalte:Ctempalte全称是Google Ctemplate.它是一种用c++语言.简单但是效率非常高的网页模版引擎.让我们来看一段代码,聪明的你立刻就知道它怎么用了(来自官方Demo) 那

  • 基于豆瓣API+Angular开发的web App

    一.扯淡的说 name:[豆瓣搜索] 最近关注了下豆瓣的API,发现豆瓣开放平台需要加强API文档撰写啊....但是有个可喜的发现豆瓣V2接口提供了搜索接口.最近在用phantom弄些爬虫,想想,真是美丽极了!有个豆瓣的接口,我都不用去爬数据,不用数据存储,丢给github page直接完事.豆瓣,Nice!最近也在看angular,于是就萌生了使用Angular + 豆瓣API 做一个web app.于是...网上回家就折腾了. 体验地址:http://vczero.github.io/t/h

  • Angular自定义指令Tooltip的方法实例

    目录 目录结构 编写 tooltip 组件 编写 tooltip 指令 页面上调用 总结 Yeah,关注我的读者应该知道,上一篇文章了解 Angular 开发的内容,我们已经概览了 Angular 的相关内容.在自定义指令的部分,我们已经能够实现编写,但是,在实际场景中,我们还需要标准化的管理. Angular 是 Angular.js 的升版 So,本文,我们就以 Tooltip 来讲解下自定义指令的内容. 线上效果图,如下: 目录结构 在上一篇文章的实现的代码项目基础上,执行命令行: # 进

  • Angular中使用ui router实现系统权限控制及开发遇到问题

    前端去实现权限控制听起来有点扯淡(实际也有点扯淡),掩耳盗铃,主要是担心安全问题,但是如果在前后端分离的情况下,需要做一个带有权限控制的后台管理系统,angular基于ui-router应该怎么做呢? 权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合.每一种角色对应一组相应的权限. 一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限.这样做的好处是,不必在每次创建用户时都进行分配

  • Angular实现点击按钮后在上方显示输入内容的方法

    本文实例讲述了Angular实现点击按钮后在上方显示输入内容的方法.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>www.jb51.net Angular显示输入内容</title> <script src="angu

随机推荐