0

我有几个疑问。请在下面找到它们 -

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

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

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

2) $watch 是为绑定到范围的所有变量创建的,还是只为视图中显示的那些范围变量创建?

3)如果你运行小提琴' http://jsfiddle.net/Lvc0u55v/5753/ ',会有>10 $digest 迭代错误。这是意料之中的。现在请按照小提琴中给出的评论和取消评论。没有错误,怎么会?这里 $scope.a 的值也无限变化对吧?

4

1 回答 1

1

让我试着回答你的问题。

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

ngInit 指令允许您评估当前范围内的表达式。

2)通常 a$watch不与作用域的每个变量相关联(即使它可以与整个摘要循环相关联)。正如您在示例中所做的那样,您已绑定$watch到名为a. $scope.a因此,它会在您的变量每次更改时触发。您也可以在这里查看文档。

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将导致无限循环。

我希望这有帮助。

于 2016-06-22T08:14:51.607 回答