まさかの続き(前回)
digestサイクル
- AngularJSがデータ双方向バインディングを実現するために、UIとモデルの差異を検証するサイクル
式(Expressions)
- Angular式とか呼ばれてる
- {{ 式 }} の形式でビューで展開できるJavaScriptの式っぽいもの
- JavaScriptっぽいだけで別物
- 全ての評価はデフォルトでスコープのプロパティに対して行われるので
- undefinedをオブジェクトとして参照できる(無論結果は全てundefined)
- フィルタが使える
$parse
- Angular式を関数に変換するサービス
- 対象のスコープを指定して関数を実行できる
var getter = $parse('user.name'); var context = {user:{name:'sasaki'}}; console.log(getter(context)); // sasaki
$watch
- 特定のオブジェクトやプロパティの変更を監視し、変更後に任意の処理を行わせるサービス
$scope.hoge = 'foo'; $scope.$watch('hoge' , function(oldValue, newValue) { console.log('hogeの内容が' + oldValue + 'から' + newValue + 'に変わりました'); });
- 関数を指定して、その戻り値の変化も検知できる
$scope.$watch(function() { return $location.path(); }, function() { console.log('パスが変わりました'); });
- watchはdigestサイクルの中で定期的に行われる
$apply
- UIとモデルの値を同期させるサービス
- digestサイクルの中で呼び出されるが、手動で呼び出すことも可能
- 特にjQueryなどによってUIの値を直接書き換えた場合など、digestサイクルで検知できない場合に手動で同期させる必要がある
$inject
- AngularJSにおける依存性注入のためのサービス
コンストラクタ’My’に対して、依存するオブジェクト$scopeを注入してコントローラを作成するvar My = function(s) { s.msg = 'Hello, AngularJS!'; }; My.$inject = ['$scope']; angular.module('myApp').controller('myController', My);