角事件改变数据发射
什么是做以下情形的最佳方式:角事件改变数据发射
在一个部件我有建立这样一个数组的函数:
var arr = ['a','b'];
在父控制器,I希望能够根据需要更改此数组。我认为我可以使用以下事件:在PHP中(使用Laravel)我可以在侦听该事件时通过引用变量来调用变量,并且通过这样做,当我修改listen
块内的变量时,原始变量将更新为。
在角度,我试图$emit
在rootScope事件,并听取父控制器上的事件:
// 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;
});
你仍然可以使用$发射和$为每个控制器被意识到的时候已经进行了更改,尽管我建议使用,一个observer pattern而不是使用$rootScope
的。
而我将如何修改列变量? – Filip
我已经用一个非常简单的例子更新了答案。 'arr'将会在两者之间共享,但是您仍然需要跟踪两者中的更改,这就是为什么我建议观察者模式的原因。 –
我结束了创建一个服务:
angular.module('common.directives.lists', [])
.factory('$generic', function() {
return {Columns: []};
})
然后,在我的两个控制器我注入$通用。在我的指令控制器中,我进入了我的主要列,之后,我在$ rootScope $rootScope.$broadcast('$genericColumns')
上播出了一个事件。在此之后,我可以听父控制器上的$genericColumns
事件,并在那里修改$ generic.Columns数组(添加额外的列),并且这些更改也反映在指令控制器上。工作正常。
在'$ scope'而不是'$ rootscope'上监听,使用'$ scope。$ on' – harishr
这会改变原来的变量吗? – Filip
相同的结果.. – Filip