controller
関数/オブジェクトは、抽象モデル・ビュー・コントローラ(MVC)を表します。MVCについて書くことは新しいことは何もありませんが、それでもAngularの最も重要な利点です。そして、それはあなたがに反応する必要があるそうならば、何よりも、それをだModel
から、変更の権利である人、そのジョブを実行します。View
Controller
link
機能についての話は異なります。MVCとは異なる視点から来ています。そしてcontroller/model/view
(テンプレート)の境界を越えたいと思ったら、それは本当に重要です。
link
関数に渡されるパラメーターから始めましょう。
function link(scope, element, attrs) {
- scopeはAngularスコープオブジェクトです。
- elementは、このディレクティブが一致するjqLiteでラップされた要素です。
- attrsは、正規化された属性名とそれに対応する値を持つオブジェクトです。
をlink
コンテキストに入れるには、すべてのディレクティブがこの初期化プロセスのステップ(コンパイル、リンク)を通過していることを言及する必要があります。Brad GreenとShyam Seshadriの本Angular JSからの抜粋:
コンパイルフェーズ(リンクの姉妹、明確に理解するためにここで言及しましょう):
このフェーズでは、AngularはDOMを調べて、テンプレートに登録されているすべてのディレクティブを識別します。次に、ディレクティブごとに、ディレクティブのルール(テンプレート、置換、トランスクルードなど)に基づいてDOMを変換し、コンパイル関数が存在する場合はそれを呼び出します。結果は、コンパイルされたテンプレート関数です。
リンクフェーズ:
ビューを動的にするために、Angularは各ディレクティブに対してリンク関数を実行します。リンク関数は通常、DOMまたはモデルにリスナーを作成します。これらのリスナーは、ビューとモデルを常に同期させます。
の使用例としては、カスタムディレクティブの作成をlink
ご覧ください。例を参照してください。「日時」をページに挿入するDOMを操作するディレクティブを作成し、毎秒更新します。
上記の豊富なソースからの非常に短いスニペットで、DOMによる実際の操作を示しています。$ timeoutサービスにフックされた関数があり、また、メモリリークを回避するためにデストラクタ呼び出しでクリアされます
.directive('myCurrentTime', function($timeout, dateFilter) {
function link(scope, element, attrs) {
...
// the not MVC job must be done
function updateTime() {
element.text(dateFilter(new Date(), format)); // here we are manipulating the DOM
}
function scheduleUpdate() {
// save the timeoutId for canceling
timeoutId = $timeout(function() {
updateTime(); // update DOM
scheduleUpdate(); // schedule the next update
}, 1000);
}
element.on('$destroy', function() {
$timeout.cancel(timeoutId);
});
...
$watch
、$digest
と$apply
。を使用できます。」とはどういう意味ですか?