角度工厂无法正常运行

时间:2015-07-24 00:04:54

标签: javascript angularjs

控制器没有正确地从工厂获取数据,以便在视图中显示(或者控制器的工厂语法不正确)。我最初拥有控制器中的所有数据并且工作正常但是当我将其传输到工厂时,数据将不再显示在视图上。所以要么控制器没有正确调用工厂数据,要么工厂没有正确定义,我不知道哪一个是错误的。

位指示:

app.controller('dbCtrl', ['$scope', 'myfactory', function($scope, myfactory) {
 myfactory.success(function(data) {

$scope.test1 = results[0].data;
$scope.test2 = results[1].data;
$scope.test3 = results[2].data;

});
}]);

厂:

app.factory('myfactory', ['$http', function($http, $q) { 

$q.all([
$http.get('/url1'),
$http.get('/url2'),
$http.get('/url3')   
]).then(function(data) { 
          return data; 
        }) 

 }]);

2 个答案:

答案 0 :(得分:2)

用于创建和访问工厂的代码语法是错误的。你应该检查angular docs

但是对于你的问题,我已经创建了匹配你的例子。 http://plnkr.co/edit/TJObJN?p=preview

myfactory.getResult().then(function(results) {
....  
}   
 app.factory('myfactory', ['$http', '$q', function($http, $q) {

  var _getResult = function() {

    // returns promise which depends on all 3 http responses.
    // parallel AJAX request.
    return $q.all([ 
      $http.get('/url1'),
      $http.get('/url2'),
      $http.get('/url3')
    ]);

  };

  // public functions available in controller 
  return {
    getResult: _getResult
  };

  ///////////////////
}]);

几点说明:

  1. 您创建的Angular工厂应返回包含函数或属性的Object。
  2. 确保在数组和函数参数中添加所有依赖项。
  3. $ q承诺只有。而$ http promise会给成功(...)回调。 查看语法和示例

答案 1 :(得分:1)

app.factory('myfactory', ['$http', function($http, $q) { 
    return {
        getAll: $q.all([
            $http.get('/url1'),
            $http.get('/url2'),
            $http.get('/url3')   
        ]).
        then(function(data) { 
            return data; 
        });
    };
}]);

然后在ctrl:

myfactory.getAll().then( ...