首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >发出的角度事件更改数据

发出的角度事件更改数据
EN

Stack Overflow用户
提问于 2016-08-18 18:23:58
回答 2查看 105关注 0票数 0

执行以下方案的最佳方法是什么:

在一个组件中,我有一个构建数组的函数,如下所示:

代码语言:javascript
运行
复制
var arr = ['a','b'];

在父控制器中,如果需要,我希望能够更改此数组。我认为我可以使用事件来实现这一点:在PHP (使用Laravel)中,我可以在侦听事件时通过引用调用变量,这样做,当我修改listen块中的变量时,原始变量将更新为。

在angular中,我尝试在rootScope上$emit一个事件,并在父控制器上侦听该事件:

代码语言:javascript
运行
复制
// directive controller
$rootScope.$emit('$genericColumns', arr)

// parent controller
$rootScope.$on('$genericColumns', function($event, arr) {
        arr = [];
        return arr;
    });

但这样做并不会修改原始的arr变量。

实现这一目标的最佳方法是什么?如何在需要时修改子指令作用域中的变量?

EN

回答 2

Stack Overflow用户

发布于 2016-08-18 18:29:56

我会使用一项服务。

代码语言:javascript
运行
复制
angular.module('app').factory('genericColumns', function(){
  var columns = {};

  columns.arr = [];   

  return columns;
});

显然,您需要在您的应用程序中正确引用它,我在这里刚刚使用了app

然后把它注入到你的控制器中,他们就会共享数据。

代码语言:javascript
运行
复制
angular.module('app').controller('ColumnCtrl', function (genericColumns){
  $scope.columns = genericColumns.arr;
});

您仍然可以为每个控制器使用$emit和$on,尽管我建议使用observer pattern而不是$rootScope

票数 0
EN

Stack Overflow用户

发布于 2016-08-18 19:22:31

我最终创建了一个服务:

代码语言:javascript
运行
复制
angular.module('common.directives.lists', [])
                .factory('$generic', function() {
                    return {Columns: []};
                })

然后,我在两个控制器中都注入了$generic。在我的指令控制器中,我进入了我的主栏,在那之后,我在$rootScope $rootScope.$broadcast('$genericColumns')上广播了一个事件。在此之后,我可以监听父控制器上的$genericColumns事件,在那里我将修改$generic.Columns数组(添加额外的列),并且更改也将反映在指令控制器上。工作正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39015745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档