$parse、$interpolate、compplie、ドルdestroy
3714 ワード
$parseはanglarが提供するjavascript解像器です.
var getter=$parse(expression)
var setter=getter.assign;
$parseはangglarの{}適合を解析できません.
だから、私たちは解析が必要です.例えば、私たちは$interpolateを使います.
compleはhtmlノードを処理するためのものです.注意するのはcomple('str')($scope)=nodeです.このnodeはdigestの後にscope valueがあることができて、ng-repeatは同じ道理で、digestがなくて1行さえ見えないで、comment記号だけあります.
var elema=$comple(directiveA)(scopeA);
1.elemaのscopeはきっとscopeAです.directiveAでも隔離scopeを使っています.
2.directiveA内にrequireがあると、それは間違っています.命令にrequireがあるなら、それはその依存コマンドと一緒にcompleしなければなりません.
3.compleはelemのパターンに依存しないで、scopeだけを気にしています.だから、elemaはappedでどこに行ってもいいです.scopeはviewを変えても変わります.
4.scopeはテンプレートに属していますので、compleのこのscopeはこのテンプレートに属しているはずです.テンプレートがremoveされるとき、あなたのscopeは一緒にremoveされるべきです.
5.templateはcompleに一回を超えることができません.同じくscopeも同じです.
6.removeまたはhtml(')テンプレートを削除するときは、呼び出しを覚えてください.scopeのように削除します
7.普通はダイナミックテンプレートを作る時だけ自分で呼び出すことができます.ほとんどの場合は簡単で実用的なコマンド、テンプレート、コントローラがいいです.
実はanggurの中で最も良いのは$timeout(fn,time,nedduigest)を使うのです.第3のパラメータは私達に後でdigestが一回多いかどうかと感じさせます.
var getter=$parse(expression)
var setter=getter.assign;
controller("ctrl", ["$scope", "$parse", "$compile", "$interpolate", function ($scope, $parse, $compile, $interpolate) {
//read
$scope.name = "hello";
var expression = "name + ' ' +((5+6) == (12-1))";
var getter = $parse(expression);
var value = getter($scope); //hello true
//write
expression = "name";
var setter = getter.assign;
setter($scope, "1782");
$scope.name; //1782
}]);
javascript evalとwithの結合に似ています.内部は複雑な正則によって実現される.$parseはangglarの{}適合を解析できません.
だから、私たちは解析が必要です.例えば、私たちは$interpolateを使います.
$scope.name = "hello";
var expression = "{{name}}";
var value = $interpolate(expression)($scope); // setter
console.log(value);
compleはhtmlノードを処理するためのものです.注意するのはcomple('str')($scope)=nodeです.このnodeはdigestの後にscope valueがあることができて、ng-repeatは同じ道理で、digestがなくて1行さえ見えないで、comment記号だけあります.
$scope.name = "hello"
var link = $compile("<div>{{name}}</div>");
var node = link($scope);
console.log(node[0].innerHTML); //{{name}} <--
setTimeout(function () {
console.log(node[0].innerHTML); //hello <--
}, 0); // $digest
$comppileで注意すること: var elema=$comple(directiveA)(scopeA);
1.elemaのscopeはきっとscopeAです.directiveAでも隔離scopeを使っています.
2.directiveA内にrequireがあると、それは間違っています.命令にrequireがあるなら、それはその依存コマンドと一緒にcompleしなければなりません.
3.compleはelemのパターンに依存しないで、scopeだけを気にしています.だから、elemaはappedでどこに行ってもいいです.scopeはviewを変えても変わります.
4.scopeはテンプレートに属していますので、compleのこのscopeはこのテンプレートに属しているはずです.テンプレートがremoveされるとき、あなたのscopeは一緒にremoveされるべきです.
5.templateはcompleに一回を超えることができません.同じくscopeも同じです.
6.removeまたはhtml(')テンプレートを削除するときは、呼び出しを覚えてください.scopeのように削除します
7.普通はダイナミックテンプレートを作る時だけ自分で呼び出すことができます.ほとんどの場合は簡単で実用的なコマンド、テンプレート、コントローラがいいです.
実はanggurの中で最も良いのは$timeout(fn,time,nedduigest)を使うのです.第3のパラメータは私達に後でdigestが一回多いかどうかと感じさせます.