gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:40:58 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com