将数据从一个控制器发送到另一个控制器

时间:2016-07-29 05:29:25

标签: angularjs

我认为这是一个非常简单的问题,但我无法弄明白。

我的angularjs文件中有2个控制器..

analyzer.controller('AnalyzerController',function($scope,$http)
        {
            $scope.builds = [];
            $http.get('/List').success(
                            function(data) {
                                $scope.builds = data.responseData;
                                });

            $scope.showbuild=function(item){
                alert(item);
            }

    });




analyzer.controller('Information',function($scope,$http)
        {
            $scope.cases = [];
            $http.get('/info').success(
                            function(data) {
                                $scope.cases = data.responseData;
                                });

                });

我想将第一个控制器中item的值发送到第二个控制器。 Item是用户从html页面框中选择的值。

2 个答案:

答案 0 :(得分:0)

像这样设置状态

$ stateProvider

.state('page1', {
    url: '/page1/:id/:name'
});
在您的控制器中

,注入$stateParams

然后你可以得到像

这样的数据
$scope.id=$stateParams.id;
$scope.name=$stateParams.name;

答案 1 :(得分:0)

主要有两种方式:1)有工厂或服务,或2)广播。

Factories or a Services都是可以注入控制器的单例。通过创建其中一个,您可以通过两个控制器中的服务使您可以获得数据。

app.service('commonService', function() {

    var data = {};

    this.getData = function () {
        return data;
    }

    this.setData = function (dataToSet) {
        data = dataToSet;
    }

});

app.controller("ControllerOne", function($scope, commonService) {
     commonService.setData({key:"value"});
});

app.controller("ControllerTwo", function($scope, commonService) {
     $scope.data = commonService.getData();
});

或者,您可以从一个控制器的范围广播到另一个控制器的范围。这个解决方案通常需要注入根镜并向另一个正在收听广播的控制器广播。

类似的东西:

// firing an event downwards
$rootscope.$broadcast('myCustomEvent', {
  someProp: 'Sending you an Object!' // send whatever you want
});

// listen for the event in the relevant $scope
$scope.$on('myCustomEvent', function (event, data) {
  console.log(data); // 'Data to send'
});

在我看来,这是一个混乱的解决方案,我总是使用服务或工厂来做这类事情。