如何将值传递给Angular js中的不同控制器

时间:2014-03-27 23:41:55

标签: javascript angularjs controller

我正在使用angular framework并尝试将$ scope传递给我的应用程序中的不同控制器。

更新

我的问题是,在用户点击按钮之前,我无法获取$ scope数据。

.controller('firstCtrl', function($scope) {
    $scope.getTest = function(){
        $scope.test1 = 'good.'
        $scope.test2 = 'bad.'
        …..more
   }
})

我需要将$ scope对象传递给不同的控制器

.controller('secondCtrl', function($scope) {
    console.log($scope.test1)
})

我该怎么办?谢谢!

3 个答案:

答案 0 :(得分:2)

要在两个控制器之间共享数据,您需要使用 factory

有关详细信息,请观看此视频:约翰·林德奎斯特的“AngularJS Video Tutorial: Sharing Data Between Controllers”。

答案 1 :(得分:2)

要在控制器之间共享信息,请使用服务。可以像这样创建服务:

//Create angular main app module
var app = angular.module('myApp', []);

//create a service
app.service('sharedService', function () {
    this.test1 = [1, 2, 3, 4];
});

//one controller, injecting the service
app.controller('firstCtrl', function ($scope, sharedService) {
    sharedService.test1[0] = 5;
    console.log(sharedService.test1[0]) //5, 2, 3, 1
});

//two controller, injecting the same service
app.controller('secondCtrl', function ($scope, sharedService) {
    sharedService.test[1] = 4;
    console.log(sharedService.test1[0]) //5, 4, 3, 1
});

这是我刚刚在jsFiddle上创建的一个例子:

http://jsfiddle.net/NHtFu/

答案 2 :(得分:1)

在$ rootScope上使用自定义事件

.controller('firstCtrl',['$rootScope', function($rootScope) {
    $scope.getTest = function(){
        $rootScope.your_object = {foo:bar}
        $rootScope.$emit('custom_event');
   }
}])

.controller('secondCtrl', function($scope,$rootScope) {
    $rootScope.$on('custom_event',function(){
    //do stuff
    //$rootScope.your_object is available
    })

});

如果控制器实例化多次

,则可能需要从该事件中取消绑定根作用域

可能存在反对“污染”的反对意见。根范围,但那是它的用途。