为什么我看不到$ scope函数中定义的$ scope变量?

时间:2015-10-19 20:31:07

标签: javascript angularjs scope

我在角度

中有以下代码
$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数组吗?

有人可以告诉我为什么会这样吗?

谢谢!

1 个答案:

答案 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

在控制器中初始化阵列会更好。