@Component
注解,对组件进行配置。html
selector
template/templateUrl
inputs/outputs
host
styleUrls
页面渲染时,Angular
组件匹配的选择器,git
使用方式:es6
<ip-address-form></ip-address-form>
采用html标签的方式。
在《Angular权威教程》中,说明另一种,<div ip-address></div>
,这种规则与选择器匹配规则一致,也能够为class选择器,根据实际场景而用。(在Ideal中引入TSLint后,程序可以正常运行,可是编辑器会警告,并提示消除警告方案)json
例如:bootstrap
@Component({ selector: '.app-single-component', template: ` <div> 这个是子组件 :{{name}} <button (click)="sendMessage()" >点我</button> </div> ` })
组件具体的html模版,template
为模版,templateUrl
为模版的路径。template
中支持es6
的反引号,进行多行编写,templdateUrl
用于配置html
模版的路径。数组
注意:在Typescript
中的构造函数只容许有一个,这也是它与es6
的一个区别app
组件中的输入与输出,能够理解为,数据输入到组件中,数据从组件中输出到父组件中。编辑器
输入使用方式:[变量名]
,在父元素页面中使用,@Input()
,在子组件class
中使用,代码例子以下:ide
@Component({ selector: 'app-single-component', template: ` <div> 这个是子组件 :{{name}} </div> ` }) export class SingleComponentComponent implements OnInit { @Input () name: string ; ngOnInit () { } }
@Component({ selector: 'app-root', template: ` <div> <app-single-component [name]="simple"></app-single-component> </div> ` }) export class AppComponent { simple: string; constructor () { this.simple = '个人世界'; } }
其中input做为@Component的元数据,那么还有另一种写法,以后的输出也一致函数
其中一段代码
@Component({ selector: 'app-single-component', inputs:['name'], template: ` <div> 这个是子组件 :{{name}} </div> ` })
输出使用方式:输出的方式或许用广播/订阅来讲更加合适。
@Component({ selector: 'app-single-component', template: ` <div> 这个是子组件 :{{name}} <button (click)="sendMessage()" >点我</button> </div> ` }) export class SingleComponentComponent implements OnInit { value: string; @Input () name: string ; @Output() emotter: EventEmitter<string>; ngOnInit () { } constructor () { this.value = '来源于组件的值'; this.emotter = new EventEmitter<string>(); } sendMessage (): void { this.emotter.emit(this.value); } }
@Component({ selector: 'app-root', template: ` <div> <app-single-component [name]="simple" (emotter)="getComponentData($event)"></app-single-component> </div> ` }) export class AppComponent { simple: string; constructor () { this.simple = '个人世界'; } getComponentData (message: string): void { console.log(`获取到子组件中的值:${message}`); } }
值为json对象key-value
,而且做用只作做用于当前组件内部,经常使用来添加class
.
固然必要的,在须要用到的component
的模块中引入:
@NgModule({ declarations: [ AppComponent, SingleComponentComponent // 引入的指令,放在声明里面 ], imports: [ BrowserModule // 引入的模块 ], providers: [], bootstrap: [AppComponent] //引导应用的根组件 }) export class AppModule { }
关于@component的元数据还未彻底,因此后面会继续完善。