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

时间:2016-06-22 07:40:25

标签: javascript angularjs angular-digest angularjs-ng-init

我的查询很少。请在下面找到它们 -

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

Mapper.CreateMap<Output, Input>().ForMember(s => s.InputProperty1, t => t.Ignore());
Mapper.CreateMap<Output, Input>().ForMember(s => s.InputProperty2, t => t.Ignore());
Mapper.CreateMap<Input, Output>();
listOfItems = Mapper.Map<List<Input>, List<Output>>(InputListObject);

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

2)是否为绑定到范围的所有变量创建了$ watch,或者它是仅为视图中显示的范围变量创建的吗?

3)如果您使用小提琴&#39; http://jsfiddle.net/Lvc0u55v/5753/&#39;,则会有> 10 $ digest迭代错误。这是预料之中的。现在请评论和取消注释小提琴。没有错误,怎么样?这里$ scope.a的价值变化无限正确吗?

1 个答案:

答案 0 :(得分:1)

让我试着回答你的问题。

1)据我所知ng-init不应该使用函数表达式。它比较习惯于处理逻辑表达式。你可以看看docs,它还指出了一个简短的例子。正如文档所说:

  

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

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;

现在,此时您的新值与以前相同。按照这个速度,观察者不会再次开火,因为价值不会改变(因为它与以前完全一样)。

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

我希望这会有所帮助。