We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在写一个文件上传组件的时候,在上层把文件列表 files: UploadFile[] 传给组件,打算用双向绑定。例如这样:
files: UploadFile[]
_files: UploadFile[] = []; @Output() filesChange = new EventEmitter(); @Input() get files() { return this._files; } set files(v) { this._files = v; this.filesChange.emit(v); }
在写到某个删除文件方法的时候,突然发现,貌似这个 setter 根本没有进去啊
this.files.splice(i, 1);
files 本身就是一个数组,引用没变就没有进 setter,那上层的变量不就没变了吗?赶紧去父组件看一看,却发现数组还真的删掉了一个文件。
files
WHAT THE FUCK???
这个问题困扰了我二十分钟,期间我不停地 Google Angular double binding object/array,发现没人遇到和我一样的问题啊,网上的例子都是用的 Primitive value, 没人用数组做例子的吗?为什么没进 setter 都能变啊,好难啊!
Angular double binding object/array
最后突然灵光一闪,特么我改的就是同一个数组啊,为什么要 emit 这个 change 呢?mdzz
data[i].checked
ChangeDetectionStrategy.OnPush
The text was updated successfully, but these errors were encountered:
No branches or pull requests
源起...
在写一个文件上传组件的时候,在上层把文件列表
files: UploadFile[]
传给组件,打算用双向绑定。例如这样:在写到某个删除文件方法的时候,突然发现,貌似这个 setter 根本没有进去啊
files
本身就是一个数组,引用没变就没有进 setter,那上层的变量不就没变了吗?赶紧去父组件看一看,却发现数组还真的删掉了一个文件。WHAT THE FUCK???
智障...
这个问题困扰了我二十分钟,期间我不停地 Google
Angular double binding object/array
,发现没人遇到和我一样的问题啊,网上的例子都是用的 Primitive value, 没人用数组做例子的吗?为什么没进 setter 都能变啊,好难啊!最后突然灵光一闪,特么我改的就是同一个数组啊,为什么要 emit 这个 change 呢?mdzz
感悟...
data[i].checked
就是两边都能改的ChangeDetectionStrategy.OnPush
,Reference value 还会导致组件 view 无法被 rerenderThe text was updated successfully, but these errors were encountered: