我有两个控制器,如下所示:
.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
})
我尝试了很多方法,并在stackoverflow上看到了很多线程,但我无法弄清楚问题是什么。
我的服务如下:
.service('GCDetails', function () {
return {};
});
我觉得我的服务错了,因为我总是返回一个空对象。有什么帮助吗?感谢。
答案 0 :(得分: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
})
答案 1 :(得分:0)
在尝试获取更新的对象之前,您的服务必须首先设置对象。
所以看起来应该是这样的
.service('GCDetails', function(){
var self = this;
self.myObject = {};
self.setObject = function (val) {
self.myObject = val;
};
self.getObject = function() {
return self.myObject;
};
});
为什么我将这个分配给自己?为了避免碰撞,当你调用getObject或setObject时,它不知道你在调用哪个self。
答案 2 :(得分: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;
});
我希望这会有所帮助。
答案 3 :(得分:0)
这应该有效,并且我总是使用服务来传递数据:
.service('GCDetails', function() {
var myObj = {};
this.setObject = function (val) {
myObj = val;
};
this.getObject = function() {
return myObj;
};
});
同样在您的控制器中,请确保从控制器中拨打GCDetails.setObject(yourvalue)
,以便在拨打GCDetails.getObject()
时实际上有值。