即使内部值没有改变,组件getter也会触发重新渲染

时间:2018-06-18 20:31:19

标签: angular typescript

我无法理解以下行为,我不是在寻找解决方法,我只是想了解为什么会这样:

我有一个非常基本的组件,我的模板中有#ifndef __IPHONE_3_0 #warning "This project uses features only available in iPhone SDK 3.0 and later." #endif #ifdef __OBJC__ #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import "YourProjectName-Swift.h" #endif 个绑定。该标题绑定到返回新Date的getter。当只返回Date时,组件将只渲染一次,我认为这是预期的行为。

但是,当我在{{ title }}中添加setInterval以更新完全不同的值时,视图将使用新日期重新呈现。这是为什么?视图中没有数据绑定到ngOnInit值。

_test

如果你想看到它的实际效果,请Codesandbox。我不是在寻找解决方案,只是想了解发生了什么。

1 个答案:

答案 0 :(得分:1)

改变检测是如何工作的:执行add_action( 'wp_enqueue_scripts', 'so_50916971_enqueue_scripts' ); function so_50916971_enqueue_scripts(){ if( is_singular( 'movies' ) || is_post_type_archive( 'movies' ) ){ wp_enqueue_style( 'my-movie-style', /* src to .css file */ ); wp_enqueue_script( 'my-movie-script', /* src to .js file */ ); } } 回调,Angular通过zone.js知道它,但它不可能知道回调正在做什么。因此,它会重新评估模板中使用的所有表达式,以了解它们的值是否已更改,如果有,则会相应地修改DOM。

从模板中绑定的getter返回一个新Date是一个可怕的想法:在每次更改检测时都会调用getter,返回的值将始终不同。你绝对不想要那个。 getter应该是幂等的:当连续两次调用时,它应该返回相同的值。