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 将导致无限循环。
希望对您有所帮助。
我几乎没有疑问。请在下面找到它们 -
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 将导致无限循环。
希望对您有所帮助。