我正在尝试建立一个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;
}]);`
答案 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) {
});
}
}]);