AngularJS で共通変数的なアレを定義する
先日(7/3)開催した ng-mtg#3 AngularJS 勉強会 1周年記念! の @agektmr さんのセッションで紹介された、AngularJS のベストプラクティスです。
デモで使われたコードはこちらです。
AngularJS を使ってみると、個々に controller や directive をあれこれするのはさほど難しくないのですが、例えば、controller A で使う変数と directive B で使う変数を共通で使いたい場合に、これを知らないと悩むんじゃないかな〜と思います。
angular.module() の .value() というメソッドを使います。
( 厳密には $provide.value() ですけど気にしない! )
1.定義する
まずはモジュール( myModule とします )を作ります。
その後に .value() として、引数に key - value 形式で共通変数にしたいデータを定義します。
こうすることで myModule 内で共通的に使えるオブジェクトが定義できます。
angular.module('myModule', ).value(
'keyName', {
'value1': 'can',
'value2': ['i', 'do', 'web'],
'value3': 12345
}
);
2.つかいかた
上のコードにさらにコードを追記して、.value() で定義したデータを使ってみます。
angular.module('myModule', ).value( 'keyName', { 'value1': 'can', 'value2': ['i', 'do', 'web'], 'value3': 12345 } ) .controller('myController', function($scope, keyName){ $scope.someModel = keyName.value1; }) .directive('myDirective', function(keyName){ return { // 省略 } });
追記したコードは controller と directive を作っただけのものになりますが、 それぞれの function の記述の引数に 1.で定義した keyName というオブジェクトを渡しています。
こうすることで、controller でも directive でも共通的な変数を扱うことができます。
ちょー簡単&便利!
controller の方を見ると、$scope.someModel というモデルに値をバインディングして使ったりもできます。
これは絶対覚えておくべきですよー!!