AngularJS工厂第一次返回没有数据,但是在调用interval方法之后它确实如此

时间:2016-04-11 00:47:02

标签: angularjs multidimensional-array angularjs-scope

我正在尝试建立一个AngularJS工厂,为我的应用程序提供一系列业务。但我似乎无法在第一次运行时得到变量。但是在运行间隔后,我得到变量。

我在页面控制器的第一次运行中得到了这个:

  

angular.js:12783错误:[$ injector:undef]提供商' businessList'必须从$ get factory method

返回一个值

但我认为我的解决方案有问题,不管怎样?任何人都能指出我在正确的方向吗?例如,在这里使用rootScope是一个好主意吗?

我想要的是一个全球可访问的应用程序列表,它是在访问开始时收集的,并通过计时器自行更新。所以我不必一直要求来自laravel后端的求助请求,当我能在列表中找到它时......是我的想法。

厂:

myApp.factory('businessList', ['$interval', '$http', '$rootScope',
    function($interval, $http, $rootScope) {
      function bedriftliste() {
        $http.get('get/allebedrifter')
            .then(function(result) {
                bedrifter = result.data;
                $rootScope.bedrifter = bedrifter;
            });
        return $rootScope.bedrifter;
    }
    var bedrifter = bedriftliste();
    // start periodic checking
    $interval(bedriftliste, 5000);
    return bedrifter;
}
]);

控制器

myApp.controller('bsC', ['$rootScope', '$scope', 'businessList', 
                    function($rootScope, $scope, businessList) {
    $scope.allebedrifter = businessList;
}]);`

1 个答案:

答案 0 :(得分:0)

虽然我迟到指出但这似乎不是解决这个问题的正确方法。您需要在工厂中进行这些更改:

myApp.factory('businessList', ['$interval', '$http', '$rootScope',
function($interval, $http, $rootScope) {
  function bedriftliste() {
    return $http.get('get/allebedrifter');
}

} ]);

在控制器中你会做这样的事情:

myApp.controller('bsC', ['$rootScope', '$scope', 'businessList', function($rootScope, $scope, businessList) {
                    function TestFunction(){
     businessList.bedriftliste().then(function successCallback(response) {
        $scope.allebedrifter = response.data;
//it will invoke 5 seconds after you receive the response from your factory method, I didn't test it but it will solve your problem
        $interval(TestFunction, 5000);
    }, function errorCallback(response) { 
    });
}            

}]);