如何在angularjs中收到控制器中的数据?

时间:2013-10-25 04:05:44

标签: angularjs

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

  1. 我有一个FruitFindController。用户输入水果名称“Apple”,单击提交给控制器的按钮。
  2. Controller调用服务“GetFruitInfo(fruit)”并传入“Apple”作为参数。
  3. 收到信息后,应调用方法“addToListAndDoStuff()”,以便将fruitinfo添加到列表中。
  4. 我的问题是,在我的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中的最佳方法是什么?”

1 个答案:

答案 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);
    });
 }