我无法在控制器中加载数据,返回undefined。
我有这个工厂服务:
app.factory('factoryLlamada', function($http,$q) { return{
cargar: function(archivo) {
var deferred = $q.defer();
$http.get(archivo).success(function(data) {
deferred.resolve(data);
})
.error(function(error) {
deferred.reject(error);
});
return deferred.promise;
}
}});
这个控制器:
app.controller('ctrlProducts', function(factoryLlamada) {
this.saludo = 'Hola'; //this work's
factoryLlamada.cargar('prueba.json').then(function(data) {
this.datos = data;
console.dir(data); //return json object (ok)
console.dir(datos); //return undefined
})
.catch(function(error) {
console.log('Se ha producido un error: '+error);
});
});
我不知道哪个是问题...
答案 0 :(得分:3)
回调函数中的this
不是指控制器。
改为写:
app.controller('ctrlProducts', function(factoryLlamada) {
var vm = this;
vm.saludo = 'Hola'; //this work's
factoryLlamada.cargar('prueba.json').then(function(data) {
vm.datos = data;
console.dir(data); //return json object (ok)
console.dir(vm.datos);
})
.catch(function(error) {
console.log('Se ha producido un error: '+error);
});
});
顺便说一下,在工厂里,你不必使用$q
承诺。只需重用$http.get
返回的承诺,代码就会非常简洁:
app.factory('factoryLlamada', function($http) { return{
cargar: function(archivo) {
return $http.get(archivo);
}
}});
并检索如下数据:
factoryLlamada.cargar('prueba.json').then(function(response) {
// data is in response.data
});