我刚开始使用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
中使用文字)
答案 0 :(得分:3)
这是正确的:
function LaunchController(User) {
由于您使用'User'
明确地将$inject
作为字符串注入,因此您不会失去关于缩小的参考。但是你仍然需要在控制器函数声明中有一个参数来接收注入的服务。
请参阅Angular tutorial on dependency injection特别是关于缩小的注意事项'举个例子。