2015-07-03 39 views
0

我有2个控制器类似如下:通过Angular中的服务在2个控制器之间传递一个var?

.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 {}; 
}); 

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

回答

0

你并没有使用服务的价值。您需要在服务中存储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 
}) 
+0

我这是给我一个语法错误在服务 – Riad

+0

检查编辑答案 – Vineet

+0

我得到一个空对象{} – Riad

0

您的服务必须先设置对象,前您尝试获取更新的对象。

所以它应该是这个样子

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

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

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

为什么我指定这个自我?为了避免碰撞,当你调用getObject或者setObject时,它不知道你在调用哪个对象。

+0

它没有工作 – Riad

+0

我没有改变我的控制器中的任何东西。我只是改变了服务,因为你建议 – Riad

+0

我不知道你在做什么,但这里是工作小提琴http://jsfiddle.net/cjs5nu3o/1/ – debuggerpk

0

这不是一个很好的做法,使从控制器的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; 
}); 

我希望这有助于。

0

这应该工作,是我一直使用的服务是传递数据:

.service('GCDetails', function() { 

    var myObj = {}; 

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

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

而且在你的控制器确保您从您的控制器调用GCDetails.setObject(yourvalue)因此它实际上有一个值,当你调用GCDetails.getObject()

+0

我会试试.. – Riad

+0

@Riad Make在尝试获取数据之前,确定你确实从控制器设置了一个值。 – Chrillewoodz

相关问题