Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular 2属性绑定生命周期_Javascript_Html_Angularjs_Dom_Angular - Fatal编程技术网

Javascript Angular 2属性绑定生命周期

Javascript Angular 2属性绑定生命周期,javascript,html,angularjs,dom,angular,Javascript,Html,Angularjs,Dom,Angular,Angular 2中定义的属性绑定生命周期是什么?例如,我的模板中有以下元素: <input type="radio" name="{{choice.question_id}}" value="{{choice.id}}" [checked]="isSelected()" (change)="select()" required> 这些属性和事件回调什么时候绑

Angular 2中定义的属性绑定生命周期是什么?例如,我的模板中有以下元素:

<input type="radio" name="{{choice.question_id}}" value="{{choice.id}}"
                    [checked]="isSelected()"
                    (change)="select()"
                    required>

这些属性和事件回调什么时候绑定?据我所知,有一个自动刷新绑定的循环。我在哪里可以找到关于这个循环的更好的解释


我上面的目标是,如果
isSelected()
,则默认选中radiobutton。因此,在初始渲染之后轮询
isSelected()
,是冗余和低效的。如何将
[checked]=“isSelected()
限制到元素第一次添加到DOM的时刻?

绑定在每个更改检测周期进行评估

更改检测在某些异步执行发生后运行。Angulars zone修补大多数异步API,如
addEventHandler
removeEventHandler
setTimeout
,…在处理此类事件后,Angulars运行更改检测并检查绑定到输入的所有表达式(
[]
{}}

这样的事件发生得非常频繁,因此绑定表达式的计算也非常频繁。因此,使这些表达式高效非常重要。这就是Angular团队不鼓励绑定到函数的原因之一,而宁愿将结果分配到属性,而改为绑定到该属性,因为属性之间存在冲突相当有效,甚至更好,绑定到主动通知更改的可观察对象和承诺(使用
| async
管道)

您无法定义在什么点计算绑定。每次运行更改检测时都会计算绑定。您可以通过设置
ChangeDetectionStrategy.OnPush
而不是
ChangeDetectionStrategy.CheckAlways
(默认)来控制更改检测何时在组件或其子组件上运行并“手动”调用更改检测


devMode
默认情况下,更改检测也会运行两次,以检查第一次更改检测本身是否没有导致模型中的任何更改,这被认为是一个bug。如果您想知道为什么会频繁调用绑定方法,则需要考虑到这一点。如果在
devMode
中,则将计数除以2以获得一个有效的数字,正如它将在
prodMode
中发生一样,一个选项将被绑定[选中]到私有字段,该字段由ngOnInit()初始化{checked=service.isChecked()}问题是,当组件通过结构指令或路由添加到DOM中时,是否每次都调用ngOnInit。我的应用程序中的逻辑是服务保持“表单”状态当用户导航到表单的某个部分时,每个输入都会从服务中轮询它的状态。因此,只有在每次通过结构指令或路由将组件添加到DOM时调用
ngOnInit()
时才需要服务调用。我不会担心对服务的调用(至少如果这不会导致每次调用都有一些服务器请求或DOM更新)会导致太多的处理能力。组件不会太频繁地添加/删除,与向DOM添加组件所导致的成本相比,调用服务的成本可以忽略。我会考虑这种过早的优化。如果该服务对每个调用都做了昂贵的工作,那么请尝试通过缓存结果等方式对其进行优化。另请参阅