Angular JS - 在 sun 中声明函数?

Angular JS - declaring function inside ng-init?

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

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

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

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

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

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 绑定到名为 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;

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

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

希望对您有所帮助。