171

ページのコンテンツが読み込まれた後に呼び出したい関数があります。$viewContentLoaded について読みましたが、うまくいきません。私は次のようなものを探しています

document.addEventListener('DOMContentLoaded', function () { 
     //Content goes here 
}, false);

上記の呼び出しは、AngularJs コントローラーでは機能しません。

4

15 に答える 15

164

$viewContentLoadedのドキュメントによると、動作するはずです

ngView コンテンツがリロードされるたびに発行されます。

$viewContentLoadedイベントが発行されます。つまり、このイベントを受け取るには、次のような親コントローラーが必要です

<div ng-controller="MainCtrl">
  <div ng-view></div>
</div>

からMainCtrlイベントを聞くことができます

  $scope.$on('$viewContentLoaded', function(){
    //Here your view content is fully loaded !!
  });

デモを確認する

于 2014-02-12T07:12:44.917 に答える
76

修正済み - 2015.06.09

次のようにディレクティブと角度要素readyメソッドを使用します。

js

.directive( 'elemReady', function( $parse ) {
   return {
       restrict: 'A',
       link: function( $scope, elem, attrs ) {    
          elem.ready(function(){
            $scope.$apply(function(){
                var func = $parse(attrs.elemReady);
                func($scope);
            })
          })
       }
    }
})

html

<div elem-ready="someMethod()"></div>

または、controller-as構文を使用している場合...

<div elem-ready="vm.someMethod()"></div>

これの利点は、UI を好きなだけ広くまたは細かくすることができ、コントローラーから DOM ロジックを削除していることです。これが推奨されるAngularの方法であると私は主張します。

同じノードで他のディレクティブが動作している場合は、このディレクティブを優先する必要がある場合があります。

于 2015-04-10T21:52:51.633 に答える
68

{{YourFunction()}}HTML要素の後に追加することで直接呼び出すことができます。

ここに がありPlunker Linkます。

于 2015-05-22T12:15:21.797 に答える
23

Googleチャートを処理しながら、このロジックを実装する必要がありました. 私がしたことは、コントローラー定義内のhtmlの最後に追加したことです。

  <body>
         -- some html here -- 
--and at the end or where ever you want --
          <div ng-init="FunCall()"></div>
    </body>

その関数では、ロジックを呼び出すだけです。

$scope.FunCall = function () {
        alert("Called");
}
于 2016-02-26T10:18:45.303 に答える
2

$digest already in progress エラーが発生している場合は、次の方法が役立つ場合があります。

return {
        restrict: 'A',
        link: function( $scope, elem, attrs ) {
            elem.ready(function(){

                if(!$scope.$$phase) {
                    $scope.$apply(function(){
                        var func = $parse(attrs.elemReady);
                        func($scope);
                    })
                }
                else {

                    var func = $parse(attrs.elemReady);
                    func($scope);
                }

            })
        }
    }
于 2016-03-15T19:17:53.110 に答える