Angularjs 通过服务在两个控制器之间传递var(角度?

Angularjs 通过服务在两个控制器之间传递var(角度?,angularjs,Angularjs,我有两个控制器,如下所示: .controller('DashCtrl', function($scope, GCs, GCDetails ) { $scope.getData = function(id) { GCs.get(id) .success(function(data){ console.log(data); // it is getting the data correctly here.

我有两个控制器,如下所示:

.controller('DashCtrl', function($scope, GCs, GCDetails ) {
    $scope.getData = function(id)
    {
        GCs.get(id)
        .success(function(data){
            console.log(data); // it is getting the data correctly here.

            // I want to pass the data to 'GCDetailCtrl' controller
            GCDetails = data;
        });
    };
})

.controller('GCDetailCtrl', function($scope, GCs) {
     console.log(GCDetails); // I am getting an empty object
     $scope.itemDetails = GCDetails; //nothing in it
})
.service('GCDetails', function () {
    return {};
});
我尝试了很多方法,在stackoverflow上看到了很多线程,但我不知道问题出在哪里

我的服务如下:

.controller('DashCtrl', function($scope, GCs, GCDetails ) {
    $scope.getData = function(id)
    {
        GCs.get(id)
        .success(function(data){
            console.log(data); // it is getting the data correctly here.

            // I want to pass the data to 'GCDetailCtrl' controller
            GCDetails = data;
        });
    };
})

.controller('GCDetailCtrl', function($scope, GCs) {
     console.log(GCDetails); // I am getting an empty object
     $scope.itemDetails = GCDetails; //nothing in it
})
.service('GCDetails', function () {
    return {};
});

我觉得我的服务是错误的,因为我总是返回一个空对象。需要帮忙吗?谢谢。

您没有在服务中分配价值。您需要在服务中存储
ajax
响应,然后在另一个控制器中调用它。按下面的方式做

.controller('DashCtrl', function($scope, GCs, GCDetails ) {
    $scope.getData = function(id)
    {
        GCs.get(id)
        .then(function(data){
            console.log(data); // it is getting the data correctly here.

            // I want to pass the data to 'GCDetailCtrl' controller
            GCDetails.myObject = data; // assign data in service's object
        });
    };
})
你的服务应该是

.service('GCDetails', function () {
    this.myObject = {};
    var self = this; 
    this.callAFunction = function() {
       return self.myObject ;
    };
 });
并在需要的地方使用此服务的对象,如下所示

.controller('GCDetailCtrl', function($scope, GCs, GCDetails) {
     $scope.itemDetails = GCDetails.callAFunction();
     console.log($scope.itemDetails); //You will get the data
})

服务必须先设置对象,然后才能尝试获取更新的对象

所以应该是这样的

.service('GCDetails', function(){
  var self = this;
  self.myObject = {};

  self.setObject = function (val) {
    self.myObject = val;
  };

  self.getObject = function() {
    return self.myObject;
  };
});

为什么我把这个分配给赛尔夫?为了避免冲突,当您调用getObject或setObject时,它不知道您在调用哪个self

从控制器进行http调用不是一个好的做法。您可以通过http调用使服务返回函数。我的建议是:

app.factory('GCdetails', function($http){
    return {
        data:{},
        setData:function(data){
          this.data=data;
        },
        get : function(params){
            return $http.get(id, {
                params : params
            });
        }
    }
});
现在从控制器更新数据:

app.controller('DashCtrl',function($scope,GCdetails){
    GCdetails.get().success(function(data){
      GCdetails.setData(data);
    });
});

app.controller('GCdetailsController',function($scope,GCdetails){
    $scope.itemDetails=GCdetails.data;
});

我希望这有帮助

这应该行得通,我总是使用服务传递数据:

.service('GCDetails', function() {

  var myObj = {};

  this.setObject = function (val) {
    myObj = val;
  };

  this.getObject = function() {
    return myObj;
  };
});

另外,在控制器中,请确保从控制器调用
GCDetails.setObject(yourvalue)
,以便在调用
GCDetails.getObject()

时,它实际上有一个值。我得到的是一个空对象{}。当然,您确定在get requests中得到数据吗。。console.log告诉我有一个json数组,我想我知道原因。。当您尝试console.log(数据)和console.log($scope.GCDetails.myObject)时。。它之前给您一个空对象,然后在itGCs中保存数据的对象是一个工厂,它通过$httpI调用get方法请求,但没有更改我控制器中的任何内容。我只是按照你的建议更改了服务。我不知道你想做什么,但这是正在工作的fiddle@Riad。在你尝试获取数据之前,请确保你确实从控制器设置了一个值。