执行以下方案的最佳方法是什么:
在一个组件中,我有一个构建数组的函数,如下所示:
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变量。
实现这一目标的最佳方法是什么?如何在需要时修改子指令作用域中的变量?
发布于 2016-08-18 18:29:56
我会使用一项服务。
angular.module('app').factory('genericColumns', function(){
var columns = {};
columns.arr = [];
return columns;
});显然,您需要在您的应用程序中正确引用它,我在这里刚刚使用了app。
然后把它注入到你的控制器中,他们就会共享数据。
angular.module('app').controller('ColumnCtrl', function (genericColumns){
$scope.columns = genericColumns.arr;
});您仍然可以为每个控制器使用$emit和$on,尽管我建议使用observer pattern而不是$rootScope。
发布于 2016-08-18 19:22:31
我最终创建了一个服务:
angular.module('common.directives.lists', [])
.factory('$generic', function() {
return {Columns: []};
})然后,我在两个控制器中都注入了$generic。在我的指令控制器中,我进入了我的主栏,在那之后,我在$rootScope $rootScope.$broadcast('$genericColumns')上广播了一个事件。在此之后,我可以监听父控制器上的$genericColumns事件,在那里我将修改$generic.Columns数组(添加额外的列),并且更改也将反映在指令控制器上。工作正常。
https://stackoverflow.com/questions/39015745
复制相似问题