执行以下方案的最佳方法是什么:
在一个组件中,我有一个像这样构建数组的函数:
var arr = ['a','b'];
在父控制器中,我希望能够在需要时更改此数组。我认为我可以使用事件:在PHP中(使用Laravel)我可以在监听该事件时通过引用调用一个变量,并通过这样做,当我修改listen
块内的变量时,原始变量得到更新。
在angular中,我在rootScope上尝试$emit
一个事件并在父控制器上侦听该事件:
// directive controller
$rootScope.$emit('$genericColumns', arr)
// parent controller
$rootScope.$on('$genericColumns', function($event, arr) {
arr = [];
return arr;
});
但是这样做不会修改原始的arr
变量。
实现这一目标的最佳方法是什么?如何在需要时修改子指令范围中的变量?
答案 0 :(得分:0)
我会使用服务。
angular.module('app').factory('genericColumns', function(){
var columns = {};
columns.arr = [];
return columns;
});
显然你需要在你的应用程序中正确引用它,我刚刚在这里使用了app
。
然后将其注入您的控制器,他们将共享数据。
angular.module('app').controller('ColumnCtrl', function (genericColumns){
$scope.columns = genericColumns.arr;
});
尽管我建议使用observer pattern代替使用$rootScope
,但您仍然可以使用$ emit和$ on来了解每个控制器何时进行了更改。
答案 1 :(得分:0)
我最终创建了一项服务:
angular.module('common.directives.lists', [])
.factory('$generic', function() {
return {Columns: []};
})
然后,在我的两个控制器中,我注入了$ generic。在我的指令控制器中,我进入了我的主列,之后,我在$ rootScope $rootScope.$broadcast('$genericColumns')
上播放了一个事件。在此之后,我可以在父控制器上监听$genericColumns
事件,然后我会修改$ generic.Columns数组(添加其他列),更改也会反映在指令控制器上。工作正常。