我有以下角度的代码
$scope.prepare = function(){
$scope.elems = [1,2,3];
};
$scope.action = function(){
var elem = $scope.elems[0]; //undefined
}
然后,在我看来,我使用指令ng-init =“ prepare()”并将click事件的动作函数附加到按钮上
<button ng-click="action()">action</button>
在动作函数中,作用域是否尚未定义elems数组?
谁能告诉我为什么会这样吗?
谢谢!
最佳答案
由于您没有在调用init()和action()的地方显示控制器或HTML的范围,所以我什至无法猜测为什么自发布代码以来您会遇到问题。这是一个证明了很多的方法:http://plnkr.co/edit/qMzPtJtp9t9CoNKkmWIc?p=preview
<div ng-init="prepare()"></div>
<input type="button" value="Call function" data-ng-click="action()" />
<p>Init Defined: {{elems}}</p>
<p>Function call: {{redefined}}</p>
$scope.prepare = function(){
$scope.elems = [1,2,3];
};
$scope.action = function(){
$scope.redefined = $scope.elems[0]; //undefined
}
这么说,您没有正确使用ng-init()。从Angluar文档中:
“此指令可能会被滥用,以在模板中添加不必要的逻辑。只有少数ngInit适当的用法,例如为ngRepeat的特殊属性设置别名...以及通过服务器端脚本注入数据。除此之外,这几种情况,则应使用控制器而不是ngInit来初始化作用域上的值。”
链接至ng-init文档:https://docs.angularjs.org/api/ng/directive/ngInit
您最好在控制器中初始化数组。