W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
組件就像一個相對獨立的盒子。在前面的文章中介紹過組件是怎么通過屬性傳遞參數(shù),并且這個屬性值你可以在模板或者js代碼中獲取。
但是到目前為止還沒介紹過子組件從父組件中獲取數(shù)組,在Ember應用中組件之間的通信是通過actions
實現(xiàn)的。
跟著下面的步驟來,創(chuàng)建一個組件之間通信的示例。
創(chuàng)建組件的方法不用我多說,直接使用Ember CLI命令創(chuàng)建即可。
ember g component button-with-confirmation
ember g component user-profile
ember g route button-with-confirmation-route
為了測試方便多增加了一個路由。
下面是組件user-profile
的定義,調(diào)用組件button-with-confirmation
,那么此時user-profile
作為父組件,button-with-confirmation
作為子組件:
{{button-with-confirmation text="Click OK to delete your account"}}
要想action
能執(zhí)行需要作如下兩步:
下面是實現(xiàn)代碼:
實現(xiàn)父組件動作(action)
在父組件中,定義好當用戶點擊“確認”之后觸發(fā)的動作。在這個例子中的動作(action
)是先找出用戶賬號再刪除。
在Ember應用中,每個組件都有一個名為actions
的屬性。這個屬性值是函數(shù),是可以被用戶或者子組件執(zhí)行的函數(shù)。
// app/components/user-profile.js
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
userDidDeleteAccount: function() {
console.log(“userDidDeleteAccount…”);
}
}
});
現(xiàn)在已經(jīng)實現(xiàn)了父組件邏輯,但是并沒有告訴Ember這個動作什么時候觸發(fā),下一步將實現(xiàn)這個功能。
實現(xiàn)子組件動作(action)
這一步我們將實現(xiàn)當用戶點擊“確定”之后觸發(fā)事件的邏輯。
// app/components/button-with-confirmation.js
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'button',
click: function() {
if (confirm(this.get('text'))) {
// 在這里獲取父組件的事件(數(shù)據(jù))并觸發(fā)
}
}
});
現(xiàn)在我們在user-profile
組件中使用onConfirm()
方法觸發(fā)組件button-with-confirmation
類中的userDidDeleteAccount
事件。
{{#button-with-confirmation text="Click OK to delete your account" onConfirm=(action 'userDidDeleteAccount')}}
執(zhí)行userDidDeleteAccount方法
{{/button-with-confirmation}}
這段代碼的意思是告訴父組件,userDidDeleteAccount
方法會通過onConfirm
方法執(zhí)行。
現(xiàn)在你可以在子組件中使用onConfirm
方法執(zhí)行父組件的動作。
// app/components/button-with-confirmation.js
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'button',
click: function() {
if (confirm(this.get('text'))) {
// 在父組件中觸發(fā)動作
this.get('onConfirm')();
}
}
});
this.gete(“onConfirm”)
從父組件返回一個值onConfirm
,然后與()
組合成了一個個方法onConfirm()
。
在模板button-with-confirmation-route.hbs
中調(diào)用組件。
{{user-profile}}
點擊這個button
,會觸發(fā)事件。彈出對話框。再點擊“確認”后執(zhí)行方法userDidDeleteAccount
,可以看到瀏覽器控制臺輸出了userDidDeleteAccount…,未點擊“確認”前或者點擊“取消”不會輸出這個信息,說明不執(zhí)行這個方法userDidDeleteAccount
。
像普通屬性,actions
可以組件的一個屬性,唯一的區(qū)別是,屬性設置為一個函數(shù),它知道如何觸發(fā)的行為。
在組件的actions
屬性中定義的方法,允許你決定怎么去處理一個事件,有助于模塊化,提高組件重用率。
到此,組件這一章節(jié)的內(nèi)容全部介紹完畢了,不知道你看懂了多少?如果有疑問請給我留言一起交流學習,獲取是直接去官網(wǎng)學習官方教程。
博文完整代碼放在Github(博文經(jīng)過多次修改,博文上的代碼與github代碼可能有出入,不過影響不大?。?,如果你覺得博文對你有點用,請在github項目上給我點個star
吧。您的肯定對我來說是最大的動力??!
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: