如何访问AngularJS中不同模块中的对象?

时间:2016-07-25 18:16:59

标签: angularjs

我有两个模块:

angular.module('test1', [])
    .run(function() {
        var numbers = [1, 2, 3,4];
        // do more operations on numbers here
    });

angular.module('test2', [])
    .run(function() {
        // I want to edit or iterate over numbers here
    });

我希望能够在numbers模块中编辑变量test2。我对Angular非常陌生,所以看起来最简单的方法是将数字放在$ rootscope中,但这似乎不太合适。

实现这一目标的最惯用方法是什么?我将数字设为.value()吗?我是否将它变成了服务?我是否让“编辑”依赖于“测试”(我仍然试图掌握这个概念)?

2 个答案:

答案 0 :(得分:2)

您需要一项服务才能传递数据。这是一个如何尝试它的例子。

var app = angular.module('app', ['access','test1','test2']);
angular.module('access', [])
    .service('accessService', function() {
        this.numbers = [1, 2, 3,4];
        // do more operations on numbers here
    });

angular.module('test1', [])
    .run(function(accessService) {
        var numbers = accessService.number;
        // do more operations on numbers here
    });

angular.module('test2', [])
    .run(function(accessService) {
       accessService.numbers.forEach(function(number){
         console.log(number)
       })
    });

答案 1 :(得分:1)

我认为运行块不是存储数据的地方,我猜它通常是应用程序初始化的地方。

如果您有一个您希望被其他人使用和修改的数字列表,您可以使用具有这些数字作为其属性的服务,并将该服务注入您喜欢的任何地方,并且因为服务是单独访问该服务的每个人服务正在使用一个且只有一个对象。

你也可以考虑一个指令,我在某个范围内有$stateProvider .state('my-state', { ... controller: 'MyCtrl', controllerAs: 'ctrl', ... }); .controller('MyCtrl', function($scope) { var $this = this; $scope.$on('ctrl.data', function(new, old) { // whatevs }); $timeout(function() { $this.data = 'changed'; }, 1000); }); ,我创建了一个numbers指令,它使用editor数据绑定来访问和修改作用域上的那个属性。

希望有所帮助