web-dev-qa-db-ja.com

AngularJS ng-include:インロードされたコントローラーで定義された関数を呼び出すonload

AngularJSを使用して、「onload」引数を使用して、「子」コントローラー(含まれているテンプレートによって呼び出されるコントローラー)内で定義された関数をトリガーすることは可能ですか?

例:

<!-- parent container -->
<div ng-include="'/path/template.html'" onload="childOnLoad()"></div>

<!-- template.html -->
<div ng-controller="childController">   
    <p ng-bind="txt"></p>
</div>

<!-- childController.js -->
app.controller('childController', function($scope) {    
    $scope.txt = "Test text";

    $scope.childOnLoad = function() {
        alert("Loaded!");
    };  
});

それは意味がありますか?または、次のように、childController内で関数を呼び出す必要がありますか?

<!-- childController.js -->
app.controller('childController', function($scope) {    
    $scope.txt = "Test text";

    $scope.childOnLoad = function() {
        alert("Loaded!");
    };

    $scope.childOnLoad();   
});
7
Matteo Piazza

親コンテナを定義したままにします。

<div ng-include="'/path/template.html'" onload="childOnLoad()"></div>

親コントローラーで次を定義します。

$scope.childOnLoad() {
  $scope.$broadcast("childOnLoad", data);
}

および子コントローラー内:

$scope.$on("childOnLoad", function (event, data) {
  alert("Loaded!");
});
2
Marco Lackovic

2回目の試行では、正しく実行しました。いくつかの関数を作成し、そのコントローラーのスコープはそれらの関数をプロパティとして取得し、次に$ scope.childOnLoad();を取得します。作成した関数を呼び出します。

実際、非常に多くの関数を定義できますが、ロード中またはロードの完了時に呼び出されません。

2
greenfox