2017-09-26 69 views
2

我的項目的一部分是組件Bng-repeat,內部組件A
這兩個組件都有不同的控制器(控制器)。
在控制器組分A,創建的函數是這樣的:監視父控制器功能

this.functionName = function(){}; 

當發生事件ng-click它被調用。

問題的實質: 如組分B的控制器,執行一些操作,每次當該功能(控制器A)被稱爲時間? 我想我能以某種方式使用$watch,但我想沒有像$scope.$parent.$parent.$watch;

+1

我寧願使用$ broadcast/$ emit來發送消息和對象,然後在接收消息的控制器上放上$ scope。$ on('somemessage',fn)你永遠不會知道你的組件會留在那個地方,如果你問我,parent.parent真的看起來很醜。 – pegla

+0

thx,我嘗試使用它。 –

+0

或者,您可以使用服務在兩個控制器之間共享狀態。 –

回答

0

東西作爲替代採用了棱角分明的的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.

希望這是一起的,你需要什麼東西行。

+0

對不起,但那不是。您通過工廠傳遞數據,但我需要跟蹤其他控制器中該方法的調用。我認爲@pegla建議的選項將是最好的。 –

+0

沒問題。您通常使用回調來響應函數調用,而不是手錶,所以我可能只是誤解了您的問題,與組件之間的數據共享有關。您可以在服務中註冊回調函數,但使用廣播也可以。我通常不喜歡使用廣播,因爲它使得稍微難以推斷應用程序中發生的情況。 –