我在文件fact1.js和fact2.js
中定义了2个角度工厂fact1.js:
angular.module('myapp').factory('fact1', function ($rootScope) {
return $rootScope.userid;
});
fact2.js:
angular.module('myapp').factory('fact2', function ($rootScope) {
return $rootScope.role;
});
app.js有:
angular.module('myapp', [
'ngCookies',
'ngResource',
'ngSanitize',
'ngRoute'
])
.config(function ($routeProvider, $locationProvider, $httpProvider) {
// config and run methods
所有这些都在不同的js文件中,我将它们加载到index.html中:
<body ng-app="myapp">
<!-- code to load angular components -->
<script src="scripts/app.js"></script>
<script src="scripts/services/fact1.js"></script>
<script src="scripts/services/fact2.js"></script>
<!-- Load other components -->
工厂仍未定义。在声明模块本身时,我在how to declare a factory上看到了几个例子,但是当它们驻留在不同的文件中时如何声明它们呢?
编辑: 注入并使用这些工厂的mycontroller.js的代码:
angular.module('myapp').controller('mycontroller', function (fact1,fact2) {
console.log("UserID is:" + fact1);
console.log("UserRole is:" + fact2);
});
答案 0 :(得分:1)
问题是,您要将您正在加载的单独模块声明为相同的模块名称,&#39; myapp&#39;。
尝试在工厂文件中执行以下操作,假设您要将它们分开:
angular.module('myapp.factory1').factory('fact1', function ($rootScope) {
return $rootScope.userid;
});
angular.module('myapp.factory2').factory('fact2', function ($rootScope) {
return $rootScope.role;
});
然后在你的app.js或中央文件中执行此操作:
angular.module('myapp', [
'myapp.factory1',
'myapp.factory2',
...
'ngSanitize',
'ngRoute'
])
这应该可以解决问题。问题是你的工厂没有被正确地声明为依赖。
答案 1 :(得分:0)
您需要注入$rootScope
依赖项
angular.module('myapp').factory('fact1', ['$rootScope', function ($rootScope) {
return $rootScope.userid;
}]);
答案 2 :(得分:0)
我认为问题不是因为文件不同。工厂定义看起来正确。但是从您的代码中为$ rootScope.role和$ rootScope.userid分配值并不明显。如果未设置$ rootScope.role和$ rootScope.userid,则可能未定义工厂。或者你的意思是喷射器无法解决它?
修改:代码的简化版http://jsfiddle.net/hUhpB/1/
angular.module('myapp', []).run(function($rootScope){
$rootScope.userid = 3;
});
angular.module('myapp').factory('fact1', function ($rootScope) {
return $rootScope.userid;
});
angular.module('myapp').controller('TestCtrl', function(fact1){
alert(fact1);
});
它按预期工作,将代码移动到外部文件并没有任何区别。
答案 3 :(得分:0)
根据您发布的内容,问题不在于您使用单独的文件。事实上,很难说基于信息和问题的问题是什么。代码提供。但是this Plunker可以正常工作,并且非常接近您如何构建问题中发布的代码。
我的建议是在实际开发代码的同时查看它,并比较两者,看看问题可能出在哪里。我敢打赌,在某些代码中,你要么没有在这里发布,要么有误传。