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。在你尝试获取数据之前,请确保你确实从控制器设置了一个值。