angular的輸入和輸出的使用方法
angular的核心組件化,可以說組件化的相當徹底。而要實現(xiàn)組件之間的通信,一個必不可少的就是輸入和輸出。通過對輸入輸出的學習,更加加深我對組件化的認識。
組件的輸入
angular
允許使用兩種形式來定義組件的輸入,一種是在裝飾器@Component
中使用inputs
來定義,另一種是使用@Input
來定義。
inputs
首先先介紹在裝飾器中使用的輸入。inputs
接收的是一個字符串數(shù)組,用來指定我們輸入的鍵名。
@Component({ selector: 'my-component', inputs: ['name'] }) class MyComponent { name: string; }
name
就會對應我們組件中的name
變量。
然后我們定義一個組件,當然不可避免有的時候會在其他的組件的模板中使用,所以就可以這樣寫。
上級組件
:
export class AppComponent { myName = 'zhangsan'; ... }
上級組件的模板
:
<app-messages [name]="myName"></app-messages>
方括號[]
:數(shù)據(jù)綁定,也叫輸入綁定。將等號右邊的變量綁定在左邊[]
中的變量上。
我們的組件
:
@Component({ selector: 'app-messages', inputs: ['name'], templateUrl: './messages.component.html', styleUrls: ['./messages.component.css'] }) export class MessagesComponent implements OnInit { name: string; }
這里我們就用name
接受了上級組件的myName
。
通過上面的圖,就很容易看輸入數(shù)據(jù)的對應關系。
然后我們打印一下看看變量是否成功輸入了。
export class MessagesComponent implements OnInit { name: string; ngOnInit() { console.log(this.name); } }
成功輸入!
@Input
上面我們實現(xiàn)了組件的數(shù)據(jù)輸入,但是angular
并沒有滿足現(xiàn)狀,還提供另外一種輸入的方法,就是@Input
。
@Component({ selector: 'my-component' }) class MyComponent { @Input() name: string; }
只要在我們的組件中定義變量的時候使用@Input
裝飾器就行了。對比上面我們使用inputs
時,少了一個二次聲明。這種方法感覺數(shù)據(jù)的傳遞少了一層關系,更加易于理解,而且代碼也更加的工整。
組件輸出
說完了組件的輸入,下面我們就該聊聊組件的輸出了。要將數(shù)據(jù)從組件中傳遞出去,就要使用輸出綁定
。
<button (click)="display()"></button>
圓括號()
: 事件綁定,又叫輸出綁定。這里我們監(jiān)聽click
事件,然后觸發(fā)display
方法。
除了click,angular
還有很多內(nèi)置的事件,當然,我們在編寫自己的組件的時候,也可以自定義一個事件,來與外部通信。
自定義事件
自定義的事件需要做三件事情:
1.在@Component配置中,制定outputs配置項
2.在配置的屬性中,設置一個EventEmitter(事件觸發(fā)器)
3.在適當?shù)臅r候,也就是要觸發(fā)的方法中,通過EventEmitter觸發(fā)事件
下面看一下示例:
@Component({ selector: 'my-component', outputs: ['newEvent'] }) export class MyComponent { newEvent: EventEmitter<string>; constructor() { this.newEvent = new EventEmitter(); } display(): void { this.newEvent.emit("test event"); } }
然后我們就可以通過上面模板中的代碼實現(xiàn)輸出了。
如果想在一個父級
的組件中使用這個輸出,就要使用我們自己的事件了。下面看一個示例:
父級組件:
export class AppComponent { ... showEvent(message: string) { console.log(`hello: ${message}`); } }
父級模板:
<app-messages (newEvent)="showEvent($event)"></app-messages>
我們的組件:
@Component({ selector: 'app-messages', outputs: ['newEvent'], templateUrl: './messages.component.html' }) export class MessagesComponent { newEvent: EventEmitter<string>; constructor(private messageService: MessageService) { this.newEvent = new EventEmitter(); } display(): void { this.newEvent.emit('test event'); } }
我們的組件模板:
<button (click)="display()">觸發(fā)</button>
引用文字
然后點擊觸發(fā),可以看到輸出hello:test event
。數(shù)據(jù)輸出成功!
好了我們再來梳理整個輸出過程:
1.我們自定以一個組件,通過內(nèi)置的click事件
觸發(fā)display
方法,這時就會觸發(fā)我們自定義的事件:newEvent
。
2.當事件觸發(fā)的時候,他會執(zhí)行上一級的方法:showEvent
。
3.我們的事件輸出了一個字符串test event
,然后通過$event
獲取這個輸出結果,并當做參數(shù)傳給上一級的方法showEvent
@Output
同輸入相同,angular
也為我們提供了輸出的第二種方式:@Output
。
用法與@input
類似:
export class MessagesComponent { @Output() newEvent: EventEmitter<string>; }
只有在定義的時候,省去了重新聲明的一步。
官方參考:https://angular.io/api/core/Component
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
python爬取安居客二手房網(wǎng)站數(shù)據(jù)(實例講解)
下面小編就為大家?guī)硪黄猵ython爬取安居客二手房網(wǎng)站數(shù)據(jù)(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10Angular2-primeNG文件上傳模塊FileUpload使用詳解
這篇文章主要為大家詳細介紹了Angular2-primeNG文件上傳模塊FileUpload使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01