Javascript 声明位于不同文件中的工厂

Javascript 声明位于不同文件中的工厂,javascript,angularjs,Javascript,Angularjs,我在fact1.js和fact2.js文件中定义了两个角度工厂 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有:

我在fact1.js和fact2.js文件中定义了两个角度工厂

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 -->

您需要注入
$rootScope
依赖项

angular.module('myapp').factory('fact1', ['$rootScope', function ($rootScope) {
    return $rootScope.userid;
}]);

我认为问题不是因为文件不同。工厂定义看起来是正确的。但是,在代码中将值分配给$rootScope.role和$rootScope.userid时,这一点并不明显。如果未设置$rootScope.role和$rootScope.userid,则工厂可能未定义。或者你是说注入器无法解决它

编辑:您的代码有简化版本


它按预期工作,将代码移动到外部文件没有任何区别。

问题在于,您将要加载的单独模块声明为相同的模块名“myapp”

在factory文件中尝试执行以下操作,假设要将它们分开:

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'
])

这应该能奏效。问题是您的工厂没有被正确地声明为依赖项。

根据您发布的内容,问题不在于您使用单独的文件。事实上,根据提供的信息和代码,很难说问题出在哪里。但是它是有效的,并且它非常接近于你在问题中所发布的代码的结构


我的建议是将它与实际的开发代码一起查看,并将两者进行比较,看看问题可能出在哪里。我敢打赌,这是一些代码,你要么没有在这里发布,要么被误译了。

对不起,我应该说清楚的。我正在module.run()方法中设置$rootScope值。所以,它们是在“myapp”加载时分配的。你不小心给了工厂相同的名称。。。你能解释一下“未定义”吗?当您注入工厂时,是否会出现错误,或者该值只是未定义的?因此,当我将这些工厂注入控制器并使用它时,会收到错误消息,说明它无法从“未定义”读取属性。我将编辑该问题,以显示用于注入的代码及其用法。@pbd。我希望这有帮助!这个答案并没有解决当前问题中提出的问题——OP没有将工厂加载到单独的模块中,也没有将工厂定义为单独的模块。虽然我很高兴他们找到了一个解决方案,但我对这个问题投了反对票,因为它对其他人来说没有价值。
angular.module('myapp.factory1').factory('fact1', function ($rootScope) {
  return $rootScope.userid;
});

angular.module('myapp.factory2').factory('fact2', function ($rootScope) {
  return $rootScope.role;
});
angular.module('myapp', [
 'myapp.factory1',
 'myapp.factory2',
  ...
 'ngSanitize',
 'ngRoute'
])