簡體   English   中英

AngularJS-Factory.function(…)未定義

[英]AngularJS - Factory.function(…) is undefined

首先,我想說我是AngularJS的新手,所以我們將不勝感激!

我正在嘗試從工廠函數中的URL收集一些JSON數據,然后將數據返回給控制器,但是它拋出一個錯誤,指出該函數不存在。 我一直在跟有關Udemy的系列教程一起關注,但是我收集的數據來自不同的來源,因此答案不在視頻中。

碼:

angular.module('MainModule', ['ngRoute']);
angular.module('MainModule').config(function($routeProvider){
    $routeProvider.when('/', {
        templateUrl: '/templates/index.html'
    });
    $routeProvider.when('/item/:id', {
        templateUrl: '/templates/item.html',
    });
});
angular.module('MainModule').controller('ItemsController', function($scope, ItemsFactory, MainSettings){
    ItemsFactory.getItems().then(function(response){
        $scope.items = response;
    });
    $scope.settings = MainSettings;
});
angular.module('MainModule').controller('ItemController', function($scope, $routeParams, ItemsFactory, MainSettings){
    $scope.item = ItemsFactory.getItem($routeParams.id);
    $scope.settings = MainSettings;
});
angular.module('MainModule').factory('ItemsFactory', function($http, $log){
    var factory = {};
    var items = false;
    factory.getItems = function(){
        $http.get('/index.php').success(function(response){
            items = response.items;
            return items;
        });
    };
    factory.getItem = function(item){
        var i = 0;
        while (i < items.length) {
            if (items[i].id == item) {
                return items[i];
            }
            i++;
        }
        return false;
    };
    return factory;
});
angular.module('MainModule').constant('MainSettings', {
    title: 'Simple RSS Reader',
    version: '1.0'
});

錯誤:

Error: ItemsFactory.getItems(...) is undefined
@http://192.168.1.234:1000/js/angular-module.js:11:2
invoke@http://192.168.1.234:1000/js/angular.js:3965:14
instantiate@http://192.168.1.234:1000/js/angular.js:3976:23
$ControllerProvider/this.$get</<@http://192.168.1.234:1000/js/angular.js:7307:18
nodeLinkFn/<@http://192.168.1.234:1000/js/angular.js:6696:34
forEach@http://192.168.1.234:1000/js/angular.js:332:11
nodeLinkFn@http://192.168.1.234:1000/js/angular.js:6683:11
compositeLinkFn@http://192.168.1.234:1000/js/angular.js:6131:13
publicLinkFn@http://192.168.1.234:1000/js/angular.js:6027:30
ngViewFillContentFactory/<.link@http://192.168.1.234:1000/js/angular-route.js:915:7
nodeLinkFn@http://192.168.1.234:1000/js/angular.js:6737:13
compositeLinkFn@http://192.168.1.234:1000/js/angular.js:6131:13
publicLinkFn@http://192.168.1.234:1000/js/angular.js:6027:30
createBoundTranscludeFn/boundTranscludeFn@http://192.168.1.234:1000/js/angular.js:6151:21
controllersBoundTransclude@http://192.168.1.234:1000/js/angular.js:6758:18
update@http://192.168.1.234:1000/js/angular-route.js:865:25
$RootScopeProvider/this.$get</Scope.prototype.$broadcast@http://192.168.1.234:1000/js/angular.js:13070:15
updateRoute/<@http://192.168.1.234:1000/js/angular-route.js:547:15
qFactory/defer/deferred.promise.then/wrappedCallback@http://192.168.1.234:1000/js/angular.js:11659:31
qFactory/defer/deferred.promise.then/wrappedCallback@http://192.168.1.234:1000/js/angular.js:11659:31
qFactory/ref/<.then/<@http://192.168.1.234:1000/js/angular.js:11745:26
$RootScopeProvider/this.$get</Scope.prototype.$eval@http://192.168.1.234:1000/js/angular.js:12788:16
$RootScopeProvider/this.$get</Scope.prototype.$digest@http://192.168.1.234:1000/js/angular.js:12600:15
$RootScopeProvider/this.$get</Scope.prototype.$apply@http://192.168.1.234:1000/js/angular.js:12892:13
done@http://192.168.1.234:1000/js/angular.js:8427:34
completeRequest@http://192.168.1.234:1000/js/angular.js:8641:7
createHttpBackend/</xhr.onreadystatechange@http://192.168.1.234:1000/js/angular.js:8580:1

<div class="ng-scope" ng-view="">

預先感謝,馬特!

我的問題與此類似,因此通過注入工廠來解決了這個問題-

angular.module('MainModule').controller('ItemsController', ['ItemsFactory', function($scope, ItemsFactory, MainSettings){
    ItemsFactory.getItems()
    .success(function(response) {..})
    .error(function(response) {..})
    .then(function(response){
        $scope.items = response;
    });
    $scope.settings = MainSettings;
}]);

如果您決定使用縮小庫或RequireJS,則最終將執行此操作。 更多信息, 這里的官方文檔。

兩種修復方法都可以單獨或一起消除該錯誤,但仍不返回數據。 控制器中列出的進樣順序是否對工作方式有任何影響?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM