We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
阅读本文,是在你了解 Angular 基本知识的前提下,如果读者还不了解,请前往官网了解。
Angular
如果读者有 vue 或者 React 的开发经验,会很好理解接下来讲解的内容~
团队开发都有自己的约定。我们这里约定 app/pages 目录下的组件是页面组件,其页面组件下的 components 是页面组件的私有组件。app/components 是公有组件。
app/pages
components
app/components
现在我们新建一个用户的列表页面。
mkdir pages 后,直接进入 pages 目录执行 ng generate component user-list 创建用户列表。你会得到下面的目录:
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,而不需要手动去操作。
app.module.ts
UserListComponent
如果你重复去新建一个组件,则脚手架不会执行,不用害怕在同一个地方有重复的组件出现
不同的路由,表示你访问不同的页面组件。这在 app-routing.module.ts 中去添加。
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>
app.component.html
<router-outlet></router-outlet>
这样浏览器进入路径 http://localhost:4200/user-list 就可以看到效果了。
http://localhost:4200/user-list
默认的是 history 模式,如果你要改为 hash 模式的话,可以修改 app-routing.module.ts 内容如下:
history
hash
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。
http://localhost:4200/#/user-list
管道你可以理解为过滤器。用过 vue 的读者应该对这个不默认。
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 文件夹统一管理管道元件。
app
mkdir pipes
ng generate pipe get-first-character 命令行创建一个获取第一个字符的管道,也会自动在 app.module.ts 中声明 GetFirstCharacterPipe(驼峰式)管道,很是方便。因为这里的功能比较简单,我们简单修改下 get-first-character.pipe.ts 文件就很满足要求了。
ng generate pipe get-first-character
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?
可以理解为指令是对控制器的补充,主要功能是对Dom元素和数据的操作,已有的指令,如:ngModel,这些指令直接到官网上查看就可以了,比较简单。
ngModel
下面我们说的是自定义的指令。
老样子,我们进入 app 目录,mkdir directives 文件夹统一管理指令。
mkdir directives
ng generate directive directive_console 创建一个输出的指令,也会自动在 app.module.ts 中声明 DirectiveConsoleDirective(驼峰式)管道,很是方便。此文件的内容如下:
ng generate directive directive_console
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 中新增:
user-list.component.html
<input type="text" id="name" appDirectiveConsole>
那么会有下面这种效果:
后面的章节会展开说指令
服务,你可以理解为请求 api 的地方,那也不错,但是不仅仅有这么个用处,在后面的章节会展开说。
api
那么我们把它当成处理 api 的地方吧。
进入 app 目录,mkdir services 文件夹统一管理服务。
mkdir services
ng generate service service_demo 创建一个 demo 数据的服务。
ng generate service service_demo
我们在 assets 文件夹下创建一个 demo.json 文件:
assets
demo.json
{ "name": "Jimmy" }
下面我们对 service-demo.service.ts 进行方法的编写,通过 http 获取 demo.json 数据。
service-demo.service.ts
http
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 文件中调用下:
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 开发单页面系统,还需要你在官网中看下基本的语法,毕竟基本的语法在这里也没什么好说的。
hold
angular
【完】✅
The text was updated successfully, but these errors were encountered:
No branches or pull requests
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
阅读本文,是在你了解
Angular
基本知识的前提下,如果读者还不了解,请前往官网了解。如果读者有 vue 或者 React 的开发经验,会很好理解接下来讲解的内容~
组件 Component
团队开发都有自己的约定。我们这里约定
app/pages
目录下的组件是页面组件,其页面组件下的components
是页面组件的私有组件。app/components
是公有组件。现在我们新建一个用户的列表页面。
mkdir pages
后,直接进入pages
目录执行ng generate component user-list
创建用户列表。你会得到下面的目录:使用命令行生成组件的好处是,它会自动在
app.module.ts
中声明本组件UserListComponent
,而不需要手动去操作。路由 Router
不同的路由,表示你访问不同的页面组件。这在
app-routing.module.ts
中去添加。首先你要引入页面组件:
之后添加路由:
为了方便演示,只保留
app.component.html
内容<router-outlet></router-outlet>
这样浏览器进入路径
http://localhost:4200/user-list
就可以看到效果了。默认的是
history
模式,如果你要改为hash
模式的话,可以修改app-routing.module.ts
内容如下:此时,你访问的路由应该是
http://localhost:4200/#/user-list
。管道 Pipeline
管道你可以理解为过滤器。用过
vue
的读者应该对这个不默认。Angular
有默认的管道元件,比如:UpperCase
LowerCase
Currency 货币
PercentPipe
DatePipe
JsonPipe
SlicePipe
使用也很简单:
当然,你还可以自定义管道。
我们在
app
目录下mkdir pipes
文件夹统一管理管道元件。ng generate pipe get-first-character
命令行创建一个获取第一个字符的管道,也会自动在app.module.ts
中声明GetFirstCharacterPipe
(驼峰式)管道,很是方便。因为这里的功能比较简单,我们简单修改下get-first-character.pipe.ts
文件就很满足要求了。调用如下:
Easy, Right?
指令 Directive
可以理解为指令是对控制器的补充,主要功能是对Dom元素和数据的操作,已有的指令,如:
ngModel
,这些指令直接到官网上查看就可以了,比较简单。下面我们说的是自定义的指令。
老样子,我们进入
app
目录,mkdir directives
文件夹统一管理指令。ng generate directive directive_console
创建一个输出的指令,也会自动在app.module.ts
中声明DirectiveConsoleDirective
(驼峰式)管道,很是方便。此文件的内容如下:我们在
user-list.component.html
中新增:那么会有下面这种效果:
服务 Service
服务,你可以理解为请求
api
的地方,那也不错,但是不仅仅有这么个用处,在后面的章节会展开说。那么我们把它当成处理
api
的地方吧。进入
app
目录,mkdir services
文件夹统一管理服务。ng generate service service_demo
创建一个 demo 数据的服务。我们在
assets
文件夹下创建一个demo.json
文件:下面我们对
service-demo.service.ts
进行方法的编写,通过http
获取demo.json
数据。之后,我们在
user-list.component.ts
文件中调用下:上面用到了
http
的相关服务,你必须在app.module.ts
中引入其模块才行的哦。运行之后,如下图:
嗯~
整体熟悉下来,你想基本
hold
住angular
开发单页面系统,还需要你在官网中看下基本的语法,毕竟基本的语法在这里也没什么好说的。【完】✅
The text was updated successfully, but these errors were encountered: