我有一些疑问。请在下面找到它们 -
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/