2014-01-13 8 views
19

In this official example、次のコードは何ですか?

// model -> view 
ctrl.$render = function() { 
    elm.html(ctrl.$viewValue); 
}; 

As far as I can see$renderが呼び出されることはありません。

$renderが実際に呼び出されると、


UPDATE

$renderようにするたびにモデルチェンジと呼ばれて見えます。しかし、モデルが初期値を取得したときに呼び出されることはありません。初期値のレンダリングを制御する方法はありますか?

答えて

27

$renderは、モデルが変更されたときに角度で呼び出されます。 $render docsによると:

$)(ビューを更新する必要があるときに呼び出され

をレンダリングします。 ng-modelディレクティブのユーザ がこのメソッドを実装することが期待されます。

それは(いつでもngModel変化と呼ばれる)$renderngModelWatchに呼び出されたかを確認するために便利です。ここでは、その後、$viewValueが更新され、$formattersと呼ばれる参照し、最終的に$renderが呼び出されます。

$scope.$watch(function ngModelWatch() { 
    var value = ngModelGet($scope); 

    // if scope model value and ngModel value are out of sync 
    if (ctrl.$modelValue !== value) { 

     var formatters = ctrl.$formatters, 
      idx = formatters.length; 

     ctrl.$modelValue = value; 
     while(idx--) { 
     value = formatters[idx](value); 
     } 

     if (ctrl.$viewValue !== value) { 
     ctrl.$viewValue = value; 
     ctrl.$render(); 
     } 
    } 

    return value; 
    }); 
}]; 

それが初期値のために呼び出されていない理由は、ディレクティブの最後であるため、この行は次のとおりです。

// load init value from DOM 
ctrl.$setViewValue(elm.html()); 

ngModelWatch()をトリガーすることなくビューの値を手動で更新するため、$formattersまたは$renderを経由せずに手動でビューの値を更新します。その行が代わりにした場合:

scope.content=elm.html(); 

あなたはそれが詳細な説明のため$watch

+2

感謝をトリガーするよう$renderは、角度によって呼び出さ参照してくださいね!モデルが変更されたときに[この例(http://stackoverflow.com/q/21084088/247243) '$ render'が呼び出されない理由を説明してください。 –

関連する問題