我有这个视图代码:
> <label class="item item-input item-select"> <i class="icon
> ion-android-map icon-color"></i>
> <span class="input-label">Estado</span>
> <select ng-model="meuEstado" required>
> <option value="0">Selecione...</option>
> <option ng-repeat="estado in listaEstados" value="{{ estado.idEstado }}">{{ estado.nmEstado }} - {{
> estado.ufEstado }}</option>
> </select> </label>
以下是我的服务:
var starter = angular.module('starter.services', []);
starter.factory('appFactory', ['$http', function($http) {
listaEstados: function(local) {
var resultado = null;
var dataToSend = {
type : 'recuperarestados'
};
$http({
url: 'http://....',
method: 'POST',
data: dataToSend
}).success(function(response, status, headers, config) {
return resultado = response;
}).error(function(err, status, headers, config) {
return resultado = null;
});
}
};
}]);
这是json返回的:
[{“idEstado”:“7”,“ufEstado”:“DF”,“nmEstado”:“Distrito Federal“},{”idEstado“:”9“,”ufEstado“:”GO“,”nmEstado“: “Goiás”},{“idEstado”:“11”,“ufEstado”:“MG”,“nmEstado”:“Minas Gerais“},{”idEstado“:”19“,”ufEstado“:”RJ“,”nmEstado“:”Rio de Janeiro“},{”idEstado“:”23“,”ufEstado“:”RS“,”nmEstado“:”Rio Grande do Sul“},{”idEstado“:”26“,”ufEstado“:”SP“,”nmEstado“: “圣保罗”}]
这是我的控制器的一部分:
starter.controller('homeCtrl', ['$scope', '$location', '$state', '$ionicHistory', '$ionicLoading', '$timeout', 'appFactory',
function($scope, $location, $state, $ionicHistory, $ionicLoading, $timeout, appFactory) {
$scope.meuEstado = "0"
$scope.listaEstados = [];
$ionicLoading.show({
templateUrl:"templates/spinner.html",
animation: 'fade-in',
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
$scope.listaEstados = appFactory.listaEstados(local);
//Define o tempo para remover o loader,
$timeout(function () {
$ionicLoading.hide();
}, 2000);
}]);
我的问题是我的服务可以从我的后端获取数据,但我无法从我的控制器获取此数据,也可以在视图上加载我的$ scope.listaEstados。
我注意到在Stackoverflow中的一些帖子中我需要使用“$ scope。$ apply”,但我已经尝试过但没有成功。
有人可以告诉我在代码中需要做哪些更改,以便在控制器中获取数据?
感谢。
答案 0 :(得分:0)
您应该使用$q
执行此操作服务:
starter.factory('appFactory', ['$http','$q', function($http,$q) {
listaEstados: function() {
var deferred=$q.defer();
var resultado = null;
var dataToSend = {
type : 'recuperarestados'
};
$http({
url: 'http://....',
method: 'POST',
data: dataToSend
}).success(function(response, status, headers, config) {
deferred.resolve(response);
}).error(function(err, status, headers, config) {
deferred.reject(response);
});
return deferred.promise;
}
};
}]);
在控制器中:
starter.controller('homeCtrl', ['$scope', '$location', '$state', '$ionicHistory', '$ionicLoading', '$timeout', 'appFactory',
function($scope, $location, $state, $ionicHistory, $ionicLoading, $timeout, appFactory) {
$scope.meuEstado = "0"
$scope.listaEstados = [];
$ionicLoading.show({
templateUrl:"templates/spinner.html",
animation: 'fade-in',
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
appFactory.listaEstados().then(function(success){
$scope.listaEstados=success;
},function(error){
//Something to handle error
})
//Define o tempo para remover o loader,
$timeout(function () {
$ionicLoading.hide();
}, 2000);
}]);