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
angular共有5种类装饰器,表明每个类的用途,angular用何种方式解析它。
NgModule
Component
Directive
Injectable
Pipe
把一个类标记为模块,并可以在这个类中配置这个模块中用到的数据。
它支持做如下配置:(下同)
导入本模块需要用到的模块,注意懒加载的模块不能导入,否则懒加载就没有作用了。
声明组件、指令、管道,这三个统称为可申明对象。
注册服务
其他模块若想使用本模块的组件、指令或管道,则需要将其抛出去。
为啥要抛出去?angular规定可声明对象应该且只能属于一个 NgModule。
告诉 Angular 哪些是动态组件,Angular 都会为其创建一个 ComponentFactory,并将其保存到 ComponentFactoryResolver 中。
若要写一个动态组件不仅要在这里加,还需要在declarations中申明。
declarations
当该模块引导时需要进行引导的组件。列在这里的所有组件都会自动添加到 entryComponents 中。即路由链接到该模块时默认显示的组件。
该 NgModule 中允许使用的声明元素的 schema(HTML 架构)。 元素和属性(无论是 Angular 组件还是指令)都必须声明在 schema 中。
当前 NgModule 在 getModuleFactory 中的名字或唯一标识符。 如果为 undefined,则该模块不会被注册进 getModuleFactory 中。
如果为 true,则该模块将会被 AOT 编译器忽略,因此始终会使用 JIT 编译。
一个装饰器,用于把某个类标记为 Angular 组件,并为它配置一些元数据,以决定该组件在运行期间该如何处理、实例化和使用。 组件是特殊的指令,它的一部分属性继承自 Directive 装饰器。
css选择器名称, 可以是标签名、属性、class等,一般都是以标签来命名,具体见指令选择器部分。
如selector: 'mo-dir'在html中使用为 <mo-dir></mo-dir> 也可以使用属性来定义, 如selector: '[mo-dir]'在html中使用为 <div mo-dir></div>
selector: 'mo-dir'
<mo-dir></mo-dir>
selector: '[mo-dir]'
<div mo-dir></div>
这两个同时只能用1个
<div>我是html内容</div>
一个或多个动画 trigger() 调用,包含一些 state() 和 transition() 定义。
服务可以在这里面注册就可以使用了
指定当前组件的变更检测策略。
组件传入的参数,相当于@Input。和@Input不同的是它是一个数组。
@Input
@Component({ selector: 'mo-dir', inputs: [id: 123], template: ` {{ id }} ` }) class BankAccount { id: number; }
inputs中的内容表示有个id属性,默认值是123。相当于@Input id: number = 123。
@Input id: number = 123
事件输出,相当于@Output,和@Output不同的是它是一个数组。
@Output
@Component({ selector: 'mo-dir', outputs: [ 'idChange' ] }) class ChildDir { idChange: EventEmitter<string> = new EventEmitter<string>(); }
相当于@output idChange: EventEmitter<string> = new EventEmitter<string>();。
@output idChange: EventEmitter<string> = new EventEmitter<string>();
它是一个css选择器, 用于在模板中标记出该指令,并触发该指令的实例化。可使用下列形式之一
@Directive({ selector: 'mo', })
<mo></mo>
@Directive({ selector: '.mo', })
<div class=".mo"></div>
@Directive({ selector: '[mo]', })
<div mo></div>
@Directive({ selector: '[type=text]', })
<input type="text"></div>
比如匹配有属性mo但是不包含class.foo
mo
.foo
@Directive({ selector: 'div[mo]:not(.foo)', })
<div mo class="foo"></div> <div mo></div>
上述指令第一个不会被匹配到,第二个会被匹配到。
@Directive({ selector: '.foo, .bar', })
<div class="foo"></div> <div class="bar></div> <div class="foo bar"></div>
上述三个均会被添加上指令。
同组件
将服务注入进来使用
Take Advantage of the exportAs Property in Angular
把指令以一个变量抛出去,供外部使用。
比如写了一个指令来修改文本颜色
@Directive({ selector: '[changeColor]', exportAs: 'changeColor' }) class ChangeColorDirective { toggleColor() { // 修改颜色的逻辑 } }
<p changeColor #changeColorRef="changeColor"></p> <button (click)="changeColorRef.toggleColor()"></button>
指令通过属性[changeColor]获取到了p元素,之后通过exportAs把指令以changeColor变量抛了出去, 在html模板中以#changeColorRef接收指令实例,这时就可以用这个指令里的内容了。
[changeColor]
exportAs
changeColor
#changeColorRef
官网讲得挺清楚:
@Injectable({ providedIn: 'root', })
管道的作用是数据转换。
管道名称
自定义一个管道:
把名字和id传入到管道进行处理
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'mo', }) export class MoPipe implements PipeTransform { transform(name: string, id: number): any { // 对传进来的数组进行处理,再return出去 } }
@Component({ selector: 'mo-dir', template: ` <p> {{ name | mo: id }} </span> ` }) class BankAccount { name: string = "deepthan" id: number = 1; }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
angular之class装饰器
angular共有5种类装饰器,表明每个类的用途,angular用何种方式解析它。
NgModule
: 标明是一个模块Component
:标明是一个组件Directive
: 标明是一个指令Injectable
: 标明是一个服务Pipe
: 标明是一个管道1.
NgModule
把一个类标记为模块,并可以在这个类中配置这个模块中用到的数据。
它支持做如下配置:(下同)
1.1 imports
导入本模块需要用到的模块,注意懒加载的模块不能导入,否则懒加载就没有作用了。
1.2. declarations: Array<Type | any[]>
声明组件、指令、管道,这三个统称为可申明对象。
1.3. providers: []
注册服务
1.4 exports: Array<Type | any[]>
其他模块若想使用本模块的组件、指令或管道,则需要将其抛出去。
1.5 entryComponents: []
告诉 Angular 哪些是动态组件,Angular 都会为其创建一个 ComponentFactory,并将其保存到 ComponentFactoryResolver 中。
若要写一个动态组件不仅要在这里加,还需要在
declarations
中申明。1.6 bootstrap:Array<Type | any[]>
当该模块引导时需要进行引导的组件。列在这里的所有组件都会自动添加到 entryComponents 中。即路由链接到该模块时默认显示的组件。
1.7 schemas: Array<SchemaMetadata | any[]>
该 NgModule 中允许使用的声明元素的 schema(HTML 架构)。 元素和属性(无论是 Angular 组件还是指令)都必须声明在 schema 中。
1.8 id: string
当前 NgModule 在 getModuleFactory 中的名字或唯一标识符。 如果为 undefined,则该模块不会被注册进 getModuleFactory 中。
1.9 jit: true
如果为 true,则该模块将会被 AOT 编译器忽略,因此始终会使用 JIT 编译。
2. Component
一个装饰器,用于把某个类标记为 Angular 组件,并为它配置一些元数据,以决定该组件在运行期间该如何处理、实例化和使用。
组件是特殊的指令,它的一部分属性继承自 Directive 装饰器。
2.1 selector: string
css选择器名称, 可以是标签名、属性、class等,一般都是以标签来命名,具体见指令选择器部分。
如
selector: 'mo-dir'
在html中使用为<mo-dir></mo-dir>
也可以使用属性来定义, 如
selector: '[mo-dir]'
在html中使用为<div mo-dir></div>
2.2 template: string、templateUrl:string
这两个同时只能用1个
<div>我是html内容</div>
2.3 styles、styleUrls
2.4 animations
一个或多个动画 trigger() 调用,包含一些 state() 和 transition() 定义。
2.5 providers
服务可以在这里面注册就可以使用了
2.6 changeDetection
指定当前组件的变更检测策略。
2.7 inputs: string[]
组件传入的参数,相当于
@Input
。和@Input
不同的是它是一个数组。inputs中的内容表示有个id属性,默认值是123。相当于
@Input id: number = 123
。2.8 outputs:string[]
事件输出,相当于
@Output
,和@Output
不同的是它是一个数组。相当于
@output idChange: EventEmitter<string> = new EventEmitter<string>();
。3. Directive
3.1 selector: string
它是一个css选择器, 用于在模板中标记出该指令,并触发该指令的实例化。可使用下列形式之一
比如匹配有属性
mo
但是不包含class.foo
上述指令第一个不会被匹配到,第二个会被匹配到。
可以同时写多个,如果匹配到其中一个即可,使用逗号隔开。
上述三个均会被添加上指令。
3.2 inputs、outputs: string[]
同组件
3.3 providers
将服务注入进来使用
3.4 exportAs: string
把指令以一个变量抛出去,供外部使用。
比如写了一个指令来修改文本颜色
指令通过属性
[changeColor]
获取到了p元素,之后通过exportAs
把指令以changeColor
变量抛了出去, 在html模板中以#changeColorRef
接收指令实例,这时就可以用这个指令里的内容了。3.5 queries、host、jit
官网讲得挺清楚:
4. Injectable
5. pipe
管道的作用是数据转换。
5.1 name: string
管道名称
5.2 pure: boolean
自定义一个管道:
把名字和id传入到管道进行处理
The text was updated successfully, but these errors were encountered: