服务注入另一个服务

时间:2015-04-14 07:31:26

标签: angularjs

我遇到了将服务注入另一个服务的问题,但是当我单独测试时,似乎工作正常。

我的项目结构是这样的,app.html包括app.jsservice1.jsservice2.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,它有效!那么我的代码现在出了什么问题呢?为什么它不起作用?

1 个答案:

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