我的項目的一部分是組件B與ng-repeat
,內部組件A。
這兩個組件都有不同的控制器(控制器)。
在控制器組分A,創建的函數是這樣的:監視父控制器功能
this.functionName = function(){};
當發生事件ng-click
它被調用。
問題的實質: 如組分B的控制器,執行一些操作,每次當該功能(控制器A)被稱爲時間? 我想我能以某種方式使用$watch
,但我想沒有像$scope.$parent.$parent.$watch;
我的項目的一部分是組件B與ng-repeat
,內部組件A。
這兩個組件都有不同的控制器(控制器)。
在控制器組分A,創建的函數是這樣的:監視父控制器功能
this.functionName = function(){};
當發生事件ng-click
它被調用。
問題的實質: 如組分B的控制器,執行一些操作,每次當該功能(控制器A)被稱爲時間? 我想我能以某種方式使用$watch
,但我想沒有像$scope.$parent.$parent.$watch;
東西作爲替代採用了棱角分明的的EventSystem,您可以使用服務的組件之間共享的狀態做。
下面是一個例子(我在這裏忽略的最佳實踐,以縮短例子):
app.service('myService', function(){
var service = this;
service.items = [];
service.addItem = function(newItem){
service.items.push(newItem);
}
});
app.component('cmpA', {
template: [
'<ul>',
'<li ng-repeat="item in $ctrl.items track by $index">{{item}}</li>',
'</ul>'
].join(''),
controller: function(myService){
this.items = myService.items;
console.log(this.items);
}
});
app.component('cmpB', {
template: [
'<div>',
'<input ng-model="$ctrl.newItem" /><button type="button" ng-click="$ctrl.save()">Save</button>',
'</div>'
].join(''),
controller: function(myService){
this.newItem = '';
this.save = function(){
myService.addItem(this.newItem);
this.newItem = '';
}
}
});
You can see it in action in this plunker.
希望這是一起的,你需要什麼東西行。
對不起,但那不是。您通過工廠傳遞數據,但我需要跟蹤其他控制器中該方法的調用。我認爲@pegla建議的選項將是最好的。 –
沒問題。您通常使用回調來響應函數調用,而不是手錶,所以我可能只是誤解了您的問題,與組件之間的數據共享有關。您可以在服務中註冊回調函數,但使用廣播也可以。我通常不喜歡使用廣播,因爲它使得稍微難以推斷應用程序中發生的情況。 –
我寧願使用$ broadcast/$ emit來發送消息和對象,然後在接收消息的控制器上放上$ scope。$ on('somemessage',fn)你永遠不會知道你的組件會留在那個地方,如果你問我,parent.parent真的看起來很醜。 – pegla
thx,我嘗試使用它。 –
或者,您可以使用服務在兩個控制器之間共享狀態。 –