AngularJS常量

mik*_*klz 35 javascript constants angularjs

是否可以使用AngularJS将常量注入另一个常量?

例如

var app = angular.module('myApp');

app.constant('foo', { message: "Hello" } );

app.constant('bar', ['foo', function(foo) { 
    return { 
        message: foo.message + ' World!' 
    } 
}]);
Run Code Online (Sandbox Code Playgroud)

我需要使用角度常量,因为我需要将它注入到配置例程中.即

app.config(['bar', function(bar) {
    console.log(bar.message);
}]);
Run Code Online (Sandbox Code Playgroud)

我知道你只能将常量和提供者注入到配置例程中,我的理解是你可以对提供者进行依赖注入,但是,它似乎不是这种场景的最佳方法......

在此先感谢您的帮助!

run*_*arm 43

你是对的,将foo和bar都注册为常量是不可能的.

此外,对于使用提供程序作为解决方法,除了必须将数据存储在提供程序实例中之外,您几乎可以正确使用它:

var app = angular.module('myApp', []);

app.constant('foo', {
    message: 'Hello'
});

app.provider('bar', ['foo', function(foo) {
  this.data = {
    message: foo.message + ' World!'
  };

  this.$get = function() {
    return this.data;
  };
}]);
Run Code Online (Sandbox Code Playgroud)

然后在config block中,注入一个bar的提供者实例(不是bar实例,因为它在配置阶段还不可用):

app.config(['barProvider', function(barProvider) {
  console.log(barProvider.data.message);
}]);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


S.D*_*Dav 6

另一种方法是使用立即调用函数表达式来定义一个函数并立即调用它。这样,表达式计算并返回函数的值,该值可以由两个常量组成。

这可以使用类似的东西来实现:

app.constant("foo", (function() {
    var message = 'Hello'
    return {
        foo: message,
        bar: message + " World!"
    }
})());
Run Code Online (Sandbox Code Playgroud)

然后使用常量,如:

console.log("foo: " + foo.foo);
console.log("bar: " + foo.bar);
Run Code Online (Sandbox Code Playgroud)