0

特定のページのすべての補間と処理がいつ完了したかを知る方法は?

            compile: function (tElement, tAttrs) {
                return function (scope, element, attrs) {
                    element.html(tpl);
                    $compile(element.contents())(scope);
                };
            },

これは同期ではありません。{{stuff}} や ng-repeat="..." などがある場合、リンク関数が戻ったときにすべてが完了するとは限りません。

ページがいつレンダリングされたかを知る方法が必要であり、処理するディレクティブがこれ以上ないため、#hash を使用してページ上に作成された要素に angular で移動できます。($anchorScroll を使用)

4

2 に答える 2

1

多分これを試してください:

$scope.$on('$viewContentLoaded', function() {
  // ....
});
于 2013-11-14T15:53:57.317 に答える
0

この非常に具体的な理由のために、Angular にはディレクティブがあります。ngCloak.

ngCloak ディレクティブは、アプリケーションのロード中に Angular html テンプレートが生の (コンパイルされていない) 形式でブラウザーによって短時間表示されるのを防ぐために使用されます。このディレクティブを使用して、html テンプレートの表示によって引き起こされる望ましくないちらつき効果を回避します。

Doc @ https://docs.angularjs.org/api/ng/directive/ngCloak

Quoraに関する同様の質問; ng-repeat の処理が完了するまで、AngularJS で div を非表示にするにはどうすればよいですか? @ https://www.quora.com/How-do-I-hide-a-div-with-AngularJS-until-ng-repeat-has-finished-processing

ここに画像の説明を入力

これは別の方法ですが、角度ディレクティブを使用することを好みます。

<li ng-repeat="opt in menuItems" my-custom-repeat-listener> </li>

そして、ディレクティブで次のようなもの

if(scope.$last) { /*fire event or etc to show the list items*/ }
于 2016-02-27T20:28:47.450 に答える