AngularJSでは、Controller間で共有可能な値を定義する方法が二通りあります。
value
constant
value
value
メソッドを使うことで、Controller間で共有できる値を定義することができます。
定義した値はControllerの引数に設定することで使用可能になります。
FactoryやService内でも同様にして利用可能です。
// 値の定義 angular.module('MyApp',[]) .value("hogeStr", "hogehoge") .value("nHoge", 123) .value("isHoge", true) .value("hogeObj", {"hoge" : "1", "fuga" : "2"}); // 使用時はControllerの引数に渡す angular.module('MyApp') .controller('MyController', [ '$scope', 'hogeStr', 'nHoge', 'isHoge', 'hogeObj', function($scope, hogeStr, nHoge, isHoge, hogeObj) { console.log(hogeStr); // hogehoge console.log(nHoge); // 123 console.log(isHoge); // true console.log(hogeObj); // {hoge: "1", fuga: "2"} }]);
constant
value
メソッド同様に、constant
メソッドを使っても共有変数を定義することができます。
// 結果はvalueと同じ angular.module('MyApp',[]) .constant("hogeStr", "hogehoge") .constant("nHoge", 123) .constant("isHoge", true) .constant("hogeObj", {"hoge" : "1", "fuga" : "2"}) .controller('MyController', [ '$scope', 'hogeStr', 'nHoge', 'isHoge', 'hogeObj', function($scope, hogeStr, nHoge, isHoge, hogeObj) { console.log(hogeStr); // hogehoge console.log(nHoge); // 123 console.log(isHoge); // true console.log(hogeObj); // {hoge: "1", fuga: "2"} }]);
valueとconstantの違い
話が飛びますが、AngularJSはアプリケーションを実行する際config
とrun
と呼ばれる二つの工程を経由します。
config
フェーズではangular.configメソッドを用い、Providerと呼ばれるモジュールの設定変更を行います。
(Providerはサービスの挙動を変更するために用いられます)
config
フェーズではまだサービスがインスタンス化されていない状態なので、サービスを機能を利用することができません。
value
もサービスの一種であるため、config
フェーズでは使うことはできません。
一方でconstant
もサービスの一種なのですが、例外的にconfig
内で使用することができます。
そのためconfig
フェーズで共有変数を利用したい場合は、必然的にconstant
を利用することになります。
じゃあvalue
は使う意味ないじゃないかと思うかもしれませんが、
「constantはconfigフェーズでのみ利用する」「valueはrunフェーズ以降で利用する」のように、
各メソッドに意味を与えつつ使い分けるというやり方が可能です。
やっぱりconstant
だけで良い気がしてきた