$parse、$interpolate、compplie、ドルdestroy

3714 ワード

$parseはanglarが提供するjavascript解像器です.
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が一回多いかどうかと感じさせます.