我遇到了将服务注入另一个服务的问题,但是当我单独测试时,似乎工作正常。
我的项目结构是这样的,app.html
包括app.js
,service1.js
,service2.js
,它们是placed in order
。
以下是我的代码:
app.js
var aoApp = angular.module('aoApp', []);
aoApp.run(function (permissionService, userService) {
userService.setPermissions("['admin']");
permissionService.print();
});
service1.js
var app = angular.module('aoApp');
app.service('userService', function(){
var user = {
permissions: []
};
this.setPermissions = function(permissions){
user.permissions = permissions;
};
this.getPermissions = function(){
return user.permissions;
};
return this;
});
service2.js
var app = angular.module('aoApp');
app.service('permissionService', function(userService){
var userGrantedPermissions = userService.getPermissions();
//Here always print '[]' rather '['admin']'
console.log(userGrantedPermissions);
this.print = function(){
console.log(userGrantedPermissions);
};
return this;
});
问题在于service2.js(permissionService),参数userGrantedPermissions
应该是[' admin'],但其值保持默认值' []&#39 ;,我不知道这里是否做错了,但我试着测试here,它有效!那么我的代码现在出了什么问题呢?为什么它不起作用?
答案 0 :(得分:1)
问题是由于代码的执行造成的。
var app = angular.module('apps', []);
app.service('s1', function(){
console.log('in s1 ctor');
return this;
});
app.service('s2', function(s1){
console.log('in s2 ctor');
return this;
});
app.run(function(s1, s2){
console.log('executing run');
});
这将打印:
in s1 ctor
in s2 ctor
executing run
因为ctors在run
方法之前运行。
您的小提琴示例不会像您在原始示例中那样运行代码。
原始示例在ctor中执行此操作:
var userGrantedPermissions = userService.getPermissions();
在run
方法之前执行,因此返回初始值[]
。
你的小提琴执行一种方法并且不会在ctor中运行任何东西。
查看此JSFIDDLE。