热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

角度2:管道中的concat数组,不会丢失数据绑定

如何解决《角度2:管道中的concat数组,不会丢失数据绑定》经验,为你挑选了1个好方法。

我有一个简单的管道:

export class MergePipe implements PipeTransform {
transform(first: any[], second: any[], order: Boolean): any {
    return order ? first.concat(second):second.concat(first);
}

我在一个简单的按钮上使用它:.

然后使用newItems.push(values)将一些值推入newItems但没有任何反应.如果我从*ngFor中删除管道,我会收到预期的更改.

我想我很想知道数据绑定是如何工作的.

感谢您提供有用的信息.



1> Günter Zöchb..:

如果修改其中一个数组,Angulars更改检测将不会看到更改,因此不会调用管道.
角度变化检测仅检查对象标识,但不检查对象内容.

您可以使管道不纯,或者您可以在每次修改Angular后创建管道的副本以查看新阵列.

@Pipe({ name: '...', pure: false})

这可能会导致严重的性能问题,因为现在每次运行更改检测时都会调用管道.

someMethod() {
  this.newItems.push(someNewItem);
  this.newItems = this.newItems.slice();
}

修改后创建副本会导致角度变化检测以识别更改并调用管道.

另一种方法是使用伪参数;

counter:int = 0;
someMethod() {
  this.newItems.push(someNewItem);
  this.counter++;
}

这样,更改检测将检测参数的更改并调用管道.


推荐阅读
author-avatar
o.o
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有