[英]Angular event change data emitted
什么是執行以下方案的最佳方法:
在一個組件中,我有一個函數可以像這樣構建一個數組:
var arr = ['a','b'];
在父控制器中,我希望能夠根據需要更改此數組。 我以為可以為此使用事件:在PHP(使用Laravel)中,我可以在偵聽該事件時通過引用來調用變量,這樣,當我在listen
塊內修改變量時,原始變量將被更新為。
在角度上,我試圖在rootScope上$emit
一個事件,並在父控制器上監聽該事件:
// directive controller
$rootScope.$emit('$genericColumns', arr)
// parent controller
$rootScope.$on('$genericColumns', function($event, arr) {
arr = [];
return arr;
});
但是這樣做不會修改原始的arr
變量。
做到這一點的最佳方法是什么? 需要時,如何在子指令范圍內修改變量?
我會使用一項服務。
angular.module('app').factory('genericColumns', function(){
var columns = {};
columns.arr = [];
return columns;
});
顯然,您需要在您的應用程序中正確引用它,我在這里只是使用過app
。
然后將其注入您的控制器,他們將共享數據。
angular.module('app').controller('ColumnCtrl', function (genericColumns){
$scope.columns = genericColumns.arr;
});
盡管我建議為此使用觀察者模式 ,而不要使用$rootScope
,但仍可以對每個控制器使用$ emit和$ on來知道何時進行了更改。
我最終創建了一個服務:
angular.module('common.directives.lists', [])
.factory('$generic', function() {
return {Columns: []};
})
然后,在我的兩個控制器中,我注入了$ generic。 在我的指令控制器中,我進入了我的主要專欄,然后,我在$ rootScope $rootScope.$broadcast('$genericColumns')
上廣播了一個事件。 在此之后,我可以在父控制器上監聽$genericColumns
事件,然后在那里修改$ generic.Columns數組(添加其他列),更改也將反映在指令控制器上。 可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.