在我的项目中,我创建了一个自定义类型,MyType
. 我想在多个角度模块中使用它,但我不确定正确的做法。我最初的猜测是创建一个公开自定义类型的服务,但这似乎有点过于复杂。我在下面有该方法的演示代码,可以在http://jsfiddle.net/deafcheese/GS4tN/找到现场演示。
有没有更好的办法?我想将东西包含在模块中,所以我不想将自定义类型公开为全局类型。
定义具有自定义类型的服务:
//this code is in file myproject.js
(function(angular, undefined) {
//custom type
function MyType(name) {
this.name = name;
}
MyType.prototype.toString = function(){
return '[MyType ' + this.name+ ']';
};
angular.module('myproject', [])
.service('myProjectService', function() {
//hack to expose MyType
this.MyType = MyType
});
}(angular));
第一控制器:
//this code is in file modulea.js
(function(angular, undefined) {
angular.module('myproject.modulea', ['myproject'])
.controller('ControllerA', function($scope,myProjectService) {
var MyType = myProjectService.MyType,
myInstance = new MyType('in controller a');
$scope.myInstance = myInstance;
});
}(angular));
第二个控制器:
//this code is in file moduleb.js
(function(angular, undefined) {
angular.module('myproject.moduleb', ['myproject'])
.controller('ControllerB', function($scope,myProjectService) {
var MyType = myProjectService.MyType,
myInstance = new MyType('in controller b');
$scope.myInstance = myInstance;
});
}(angular));
更新:我创建了使用常量而不是服务的http://jsfiddle.net/deafcheese/GS4tN/1/ :
angular.module('myproject', [])
.constant('myProjectsModel', {MyType:MyType});
}(angular));
有关系吗?一个会比另一个更好吗?我相信常量应该在其他提供者之前加载,对吗?