0

假设我有一个指令,其中包含一个用户可以输入水果名称的表单。

  1. 我有一个 FruitFindController。用户输入水果名称“Apple”,单击提交给控制器的按钮。
  2. 控制器调用服务“GetFruitInfo(fruit)”并传入“Apple”作为参数。
  3. 一旦收到信息,它应该调用一个方法“addToListAndDoStuff()”以便将fruitinfo添加到列表中。

我的问题是,在我的 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 的最佳方法是什么?

4

1 回答 1

0

最好的方法是使用 Promise。在您的 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);
    });
 }
于 2013-10-25T08:54:25.327 回答