我在角度
中有以下代码$scope.prepare = function(){
$scope.elems = [1,2,3];
};
$scope.action = function(){
var elem = $scope.elems[0]; //undefined
}
然后,在我看来,我使用指令ng-init =“prepare()”并在点击事件上附加操作功能按钮
<button ng-click="action()">action</button>
在动作功能中,范围没有定义elems数组吗?
有人可以告诉我为什么会这样吗?
谢谢!
答案 0 :(得分:2)
由于您没有显示控制器或您调用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文档:
&#34;可以滥用此指令将不必要的逻辑量添加到模板中。 ngInit只有少数适当的用途,例如用于别名ngRepeat的特殊属性...以及通过服务器端脚本注入数据。除了这几种情况,您应该使用控制器而不是ngInit来初始化范围上的值。&#34;
指向ng-init文档的链接:https://docs.angularjs.org/api/ng/directive/ngInit
在控制器中初始化阵列会更好。