javascript - 类型错误 : Cannot read property 'getAccounts' of undefined

标签 javascript angularjs dependency-injection iife

我正在按照 John Papa 的 Angular Style 指南创建一个小型应用程序,但我似乎无法解决 controller 的问题。使用来自 service 的方法...

模块

(function () {
    'use strict';
    var accountsApp = angular.module('accountsApp', ['ui.bootstrap', 'ngAnimate']);
})();

Controller

(function() {
    'use strict';

    angular
        .module('accountsApp')
        .controller('accountsCtrl', accountsCtrl);

    accountsCtrl.$inject = ['$log'];

    function accountsCtrl($log, accountsDataSvc) {
        /* jshint validthis:true */
        var vm = this;
        vm.title = 'Accounts';
        vm.accounts = [];
        vm.accountForm = null;
        vm.account = { id: 0, name: '', description: '' }

        activate();

        function activate() {
            return getAccounts(1).then(function() {
                $log.info('Accounts loaded');
            });
        }

        function getAccounts(id) {
            return accountsDataSvc.getAccounts(id).then(function(data) { //error here
                vm.accounts = data;
                return vm.accounts;
            });
        }
    }
})();

服务

(function () {
    'use strict';

    angular
        .module('accountsApp')
        .factory('accountsDataSvc', accountsDataSvc);

    accountsDataSvc.$inject = ['$http', '$log'];

    function accountsDataSvc($http, $log, $q) {

        var uri = '***';

        var service = {
            getAccounts: accounts
        };

        return service;

        //////////////////////

        function accounts(userId) {
            $log.info(uri + userId + ' called');
            return $http.get(uri + userId)
                .then(getAccountsComplete)
                .catch(function (message) {
                    $log.error('XHR Failed for getAccounts ' + message);
                });

            function getAccountsComplete(data, status, headers, config) {
                return data.data[0].data.results;
            }
        }
    }
})();

当我运行应用程序时,我收到错误 TypeError: Cannot read property 'getAccounts' of undefined in the controller,但我看不出我哪里出错了 - 任何帮助都是非常感谢。

最佳答案

看起来你忘了将 accountsDataSvc 注入(inject)你的 Controller

尝试:

accountsCtrl.$inject = ['$log', 'accountsDataSvc'];

关于javascript - 类型错误 : Cannot read property 'getAccounts' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29649327/

相关文章:

javascript - 如何使用 Angular 的装饰器模式来增强指令的链接功能?

asp.net - webforms依赖注入(inject)CS7036 : There is no argument given that corresponds to the required formal parameter

c# - 我应该在哪里定义我的 NinjectModule 和我的工厂?

c# - 验证.net核心中单例内部 transient 的范围?

javascript - 在ready函数中使用变量的值

javascript - 我需要从 $scope 到其他数据库的不同 id 中获取最大值

javascript - angularjs 和范围问题(我认为)

node.js - MEAN 堆栈中缺少哈希前缀错误

JavaScript boolean 表达式简化

javascript - 如何使用 Angular JS 将数据从 json 转换为对象列表