假设我有一个包含表单的指令,用户可以在其中输入水果的名称。
我的问题是,在我的FruitFindController中(假设fruitFinder是服务)......
$scope.GetFruitInfo = function() {
$scope.foundFruit = fruitFinder.GetFruitInfo($scope.fruitField);
// should alert "Found Fruit" and call addToListAndDoStuff() method to add the foundFruit information to the list managed by another directive, "FruitList".
}
在执行下面的任何代码并弹出警告框之前,“等待信息存储到$ scope.foundFruit中的最佳方法是什么?”
答案 0 :(得分:0)
最好的方法是使用承诺。在您的fruitFinder服务中,GetFruitInfo方法看起来像这样..
function GetFruitInfo(fruit) {
var delay = $q.defer();
$http({method: 'GET', url: 'http://myapi.com/getFruitInfo?fruit=' + fruit}).
success(function(data, status, headers, config) {
delay.resolve(data);
}).
error(function(data, status, headers, config) {
delay.reject(data);
});
return delay.promise;
}
此方法返回一个promise对象,您可以使用.then()方法等待它在控制器中解析,就像这样..
$scope.GetFruitInfo = function() {
$scope.foundFruit = fruitFinder.GetFruitInfo($scope.fruitField).then(function(response) {
alert('Found Fruit');
addToListAndDoStuff(response);
});
}