AngularJS ng-include:onload调用包含在控制器中定义的函数

时间:2014-03-27 10:46:28

标签: angularjs angularjs-ng-include

使用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();   
});

2 个答案:

答案 0 :(得分:2)

在你的第二次尝试中你做得对:你正在创建一些函数,该控制器的范围是将这些函数作为属性,然后是$ scope.childOnLoad();将调用您创建的函数。

实际上,您可以定义这么多函数,但在加载或加载完成时不会调用它们。

答案 1 :(得分:2)

将父容器保留为您定义它的方式:

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

在父控制器中定义:

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

并在子控制器中:

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