依赖注入 - 出了什么问题

时间:2015-10-25 21:52:17

标签: angularjs dependency-injection

我刚开始使用AngularJS的应用

当我定义我的控制器时,我发现了一些奇怪的东西,我似乎无法自己回答。

我的控制器:

    (function () {
    "use strict";
    angular
            .module("app")
            .controller("LaunchController", LaunchController);
    LaunchController.$inject =["User"];
    function LaunchController() {
        var vm = this; //this = controllerobject -- vm(=ViewModel)
        vm.name = "launchtestname";
        vm.user= new User("a","b","c","d","e");
    }
    ;
})()

和我打电话的服务:

(function () {
    "use strict";
    angular
            .module("app")
            .factory("User", User);
    function User() {
        /**
         * Constructor, with class name
         */
        var User =function (firstName, lastName, role, organisation) {
            // Public properties, assigned to the instance ('this')
            this.firstName = firstName;
            this.lastName = lastName;
            this.role = role;
            this.organisation = organisation;
        }

        /**
         * Public method, assigned to prototype
         */
        User.prototype.getFullName = function () {
            return this.firstName + ' ' + this.lastName;
        };

        /**
         * Private property
         */
        var possibleRoles = ['admin', 'editor', 'guest'];

        /**
         * Private function
         */
        function checkRole(role) {
            return possibleRoles.indexOf(role) !== -1;
        }

        /**
         * Static property
         * Using copy to prevent modifications to private property
         */
        User.possibleRoles = angular.copy(possibleRoles);

        /**
         * Static method, assigned to class
         * Instance ('this') is not available in static context
         */
        User.build = function (data) {
            if (!checkRole(data.role)) {
                return;
            }
            return new User(
                    data.first_name,
                    data.last_name,
                    data.role,
                    Organisation.build(data.organisation) // another model
                    );
        };

        /**
         * Return the constructor function
         */
        console.log(User);
        return User;
        };
})();

现在我在启动控制器中调用用户构造函数时遇到的问题是我收到了User未定义的错误。

但是,如果我将用户服务注入控制器,如下所示:

function LaunchController(User) {

没有$ inject - 这个问题没有发生。

我想知道两次调用之间的区别是什么,因为我想使用gulp来缩小我的代码而不会丢失对User的引用(我在$inject中使用文字)

1 个答案:

答案 0 :(得分:3)

这是正确的:

function LaunchController(User) {

由于您使用'User'明确地将$inject作为字符串注入,因此您不会失去关于缩小的参考。但是你仍然需要在控制器函数声明中有一个参数来接收注入的服务。

请参阅Angular tutorial on dependency injection特别是关于缩小的注意事项'举个例子。