javascript - Angular JS - 在 ng-init 中声明函数?

标签 javascript angularjs angularjs-digest angularjs-ng-init

我有一些疑问。请在下面找到它们 -

1) 在 ng-init 中定义的函数,如下所示

ng-init='function a() {}'

出现错误。将语法更改为变量声明类型或立即调用也不起作用。为什么?因为我们无论如何都可以声明变量、对象、数组。为什么不是一个函数?

2) $watch 是为与某个范围相关的所有变量创建的,还是仅为 View 中显示的那些范围变量创建?

3) 如果您运行 fiddle ' http://jsfiddle.net/Lvc0u55v/5753/ ',存在 >10 $digest 迭代错误。这是预料之中的。现在请按照 fiddle 中的说明进行评论和取消评论。没有错误,怎么会呢?这里 $scope.a 的值也无限变化,对吗?

最佳答案

让我尝试回答您的问题。

1) 据我所知,ng-init 不应该与函数表达式一起使用。它更适合用来处理逻辑表达式。您可以查看docs ,还指出了其中包括一个简短的示例。正如医生所说:

The ngInit directive allows you to evaluate an expression in the current scope.

2) 一般来说,$watch 并不与作用域的每个变量相关联(即使它可以与整个摘要周期相关联)。正如您在示例中所做的那样,您已将 $watch 绑定(bind)到名为 a 的范围变量。因此,每次 $scope.a 变量发生变化时它都会触发。您还可以查看docs这里也一样。

3)关于这个问题,答案很简单。假设我们从 $scope.a = 10 开始(正如您已经完成的那样)。当您运行应用程序时,您的 $watch 就会非常火。这样做,您将得到以下结果:

nv = 10;
ov = 10;
$scope.a = ov * 9;

假设,您的 $scope.a 现在将为 90,这显然会再次触发您的观察者。这次有以下内容:

nv = 90;
ov = 10;
$scope.a = ov * 9;

现在,此时您的新值与之前的值相同。按照这个速度,您的观察者将不会再次触发,因为该值不会改变(因为它与以前完全相同)。

另一方面,运行 $scope.a = nv * 9 总是会更新 $scope.a 并且 this 将导致无限循环。

我希望这会有所帮助。

关于javascript - Angular JS - 在 ng-init 中声明函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961552/

相关文章:

javascript - 我应该总是将函数绑定(bind)到 $scope 对象吗?

javascript - 在 AngularJS 的 Controller 中调用 JSON 的值,以便我可以编辑它

angularjs - 快速连续调用$ rootScope。$ apply()时,$ digest已经在进行中

c# - Javascript 上下文菜单到 C#

javascript - Div 因未知原因未显示

javascript - 在 angularjs 中,在到达 $scope.submit 的第一行之前就出现 Okta 错误

javascript - "Ghost"ng点击功能

javascript - Angular : Update model from directive

javascript - 在 Next.js 中为导航链接添加事件类

javascript - 检测浏览器是否支持右键事件覆盖