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

标签 javascript angularjs scope

我有以下一段 Angular 代码

$scope.prepare = function(){
   $scope.elems = [1,2,3];
};

$scope.action = function(){
   var elem = $scope.elems[0]; //undefined
}

然后,在我看来,我使用指令 ng-init="prepare()"并将点击事件的 action 函数附加到按钮

<button ng-click="action()">action</button>

在操作函数中,范围没有定义elems数组吗?

谁能告诉我为什么会这样?

谢谢!

最佳答案

由于您没有显示调用 init() 和 action() 的 Controller 或 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 的特殊属性的别名......以及通过服务器端脚本注入(inject)数据。此外在这几种情况下,您应该使用 Controller 而不是 ngInit 来初始化作用域上的值。”

ng-init 文档链接:https://docs.angularjs.org/api/ng/directive/ngInit

在 Controller 中初始化数组会更好。

关于javascript - 为什么我看不到 $scope 函数中定义的 $scope 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33223382/

相关文章:

javascript - 禁用href标签

javascript - 将 onPause/onResume 添加到 Ionic 2 页面中的 Youtube 视频

javascript - AngularJS Ui Router 正则表达式匹配 url 中的通配符

javascript - 函数 if 语句内使用的全局变量似乎是空白 JavaScript

javascript - 无法使用 handlebars 和 assemblefile.js 呈现部分

javascript - 如何在Ajax中绕过GET请求方法的当前页面?

javascript - ng-messages 不起作用

mysql - Ruby/Rails 使用 MySQL 中的计算列对范围内的对象进行计数

java - 了解 Java 内部类中的作用域

javascript - 相对定位下拉菜单