У меня есть два контроллера:
.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 {};
});
Я чувствую, что мое обслуживание неверно, потому что я всегда возвращаю пустой объект. любая помощь, пожалуйста? Благодарю.
Неправильно использовать 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()
.
ваша служба должна сначала установить объект, прежде чем пытаться извлечь обновленный объект.
поэтому он должен выглядеть примерно так
.service('GCDetails', function(){
var self = this;
self.myObject = {};
self.setObject = function (val) {
self.myObject = val;
};
self.getObject = function() {
return self.myObject;
};
});
почему я назначил это себе? чтобы избежать столкновения, когда вы вызываете getObject или setObject, он не знает, к какому я вам звоню.
Вы не назначаете значение в сервисе. Вам необходимо сохранить ответ 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 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
})