我正在使用角度1.2.5。我有很多页面。有些页面使用以div标签开头的html模板,但其他页面使用以body标签开头的html模板。
我想在加载时调用一些函数来初始化页面。但是带有body标签的页面不会调用init方法。为什么?
<div class="row" data-ng-init="init()" ng-cloak>
行。
<body data-ng-init="init()">
不行。
答案 0 :(得分:1)
首先,必须在作用域上声明从View调用的任何类型的函数 - 这通常使用控制器完成:
.controller("MainCtrl", function($scope){
$scope.init = function(){
}
});
对于<body>
,如果未在元素上定义ng-controller
,则唯一可以定义它的地方是<html>
标记 - 你有吗?
第二次,你真的不应该使用ng-init
来初始化事物 - 这就是你可以使用控制器的东西。在上面的示例中,只需在控制器函数中初始化ViewModel - 无需单独使用$scope.init()
调用ng-init
:
.controller("MainCtrl", function($scope){
init();
// init function here is only for organization purposes
// it is not exposed on the scope - there is no need to
function init(){
$scope.foo = "bar";
}
});
那么,ng-init
有什么用?
这是相当有限的 - 这是Angular docs对此所说的:
ngInit
的唯一合适用途是对ngRepeat
的特殊属性进行别名,如下面的演示所示。除了这种情况,您应该使用controllers而不是ngInit
来初始化范围上的值。