7

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

2 回答 2

2

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

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

于 2014-12-08T18:32:38.973 回答
2

按照您定义的方式保留父容器:

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

在父控制器中定义:

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

在子控制器中:

$scope.$on("childOnLoad", function (event, data) {
  alert("Loaded!");
});
于 2017-01-19T12:02:15.353 回答