如何在angularjs中将数据从一个控制器发送到另一个控制器

时间:2016-02-15 09:42:46

标签: angularjs

如何使用angularjs将json数据从FirstCtrl发送到secondCtrl。

任何人都可以帮我解决这个问题......

First.js:

angular.module('myApp')
    .controller('FirstCtrl', function ($scope) {

    //firstCtrl json data
       $.getJSON("sample.json", function (json) {
            console.log(json);
         });
    });

Second.js:

angular.module('myApp')
    .controller('secondCtrl', function ($scope) {

       //get the firstCtrl json data here
    });

5 个答案:

答案 0 :(得分:4)

我还建议一个从控制器获取数据并从中返回数据的服务。

我们创建了两个控制器,然后我们创建了一个具有两个函数的服务: 1.获取json数据 2.一个返回json数据

像这样:

'use strict';
angular.module('myApp', [])

.controller('FirstCtrl', function( $scope, myService ){
 //we create or get the json object
 $scope.myjsonObj = {
      'animal':'cat',
      'feed':'frieskies',
      'color':'white',
      'sex':'male'
      };

      //pass the json object to the service
      myService.setJson($scope.myjsonObj);
})

.controller('SecondCtrl', function( $scope, myService ){
        //call service getJson() function to get the data
       $scope.myreturnedData = myService.getJson();
})
 .factory('myService', function(){
    var myjsonObj = null;//the object to hold our data
     return {
     getJson:function(){
       return myjsonObj;
     },
     setJson:function(value){
      myjsonObj = value;
     }
     }

});

,HTML部分将是:

 <div ng-app="myApp">
        <div ng-controller="FirstCtrl">
          {{myjsonObj}}
        </div>
        <hr>
        <div ng-controller="SecondCtrl">
            {{myreturnedData.animal}}
            {{myreturnedData.feed}}
            {{myreturnedData.color}}
            {{myreturnedData.sex}}
        </div>

希望有所帮助,祝你好运。

答案 1 :(得分:1)

如果第二个控制器是嵌套的,则可以使用$ parent访问第一个控制器的范围。您需要将json的值分配给$ scope,例如

$scope.json = my_json

然后在第二个控制器中你可以说

$scope.json = $scope.$parent.json;

答案 2 :(得分:1)

relatedTarget
 var app = angular.module('myApp', []);
 
 app.controller('Ctrl1', function ($scope, $rootScope) {
 $scope.msg = 'World';
 $rootScope.name = 'AngularJS';
 });
 
 app.controller('Ctrl2', function ($scope, $rootScope) {
 $scope.msg = 'Dot Net Tricks';
 $scope.myName = $rootScope.name;
 });

答案 3 :(得分:0)

哟可以简单地创建一个新的服务,其中两个函数用于保存日期,另一个用于提供日期,然后可以从任何位置访问此服务。 此外,您可以将数据分配给$rootScope.someVar,这样也可以从任何位置检索数据

答案 4 :(得分:0)

只需使用$rootScope即可实现。  在您的第一个控制器中分配$rootScope.json = $scope.json;,它将在整个应用程序中可用。因此,您可以在该特定应用上的任意位置访问$rootScope.json