javascript - 跟踪组件内数组变化的最佳方法是什么?

标签 javascript arrays angular typescript angular-changedetection

在 Angular 7 中创建自定义组件时,跟踪数组更改的最佳方法是什么?

示例:

export class Test {
   @Input() myArray = []

 // tell if array was modified (push, pop, reassigned...)
}

另外,有没有更好的方法来做到这一点(例如可观察量等)?为什么?

最佳答案

我会使用ngOnChanges()来做到这一点这是 Angular 生命周期 Hook 之一。您可以在哪里找到以下信息:

  1. 如果这是第一次更改。
  2. 当前值是多少。
  3. 之前的值是多少。

其类型为:SimpleChange

ngOnChanges(changes: SimpleChanges){
 // Detect Changes
  let myArrayChange = changes['myArray'];
  let currentValue = myArrayChange.currentValue;
  let previousValue = myArrayChange.previousValue;
}

此外,Angular 更改检测仅检查对象身份,而不检查对象内容,因此不会检测到推送、弹出。因此,您可以做的是在分配此输入的子组件中,而推,使用 slice() 推不同的对象方法Array

子组件 HTML:

<test myArray="arr"></test>

子组件 TS:

export class Child{

    arr: any = [];

    someMethod(){
        this.arr.push('new element');
        this.arr = this.arr.slice();
    }
}

关于javascript - 跟踪组件内数组变化的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192196/

相关文章:

jQuery:从元素的子元素创建 javascript 数组

c++ - VS2010代码分析奇怪的数组限制报错

angular - ChartJS 插件数据标签在 Ionic 3 上不显示标签

javascript - Angular2 表在过滤后无法正确构建

angular - 从新行开始文本

javascript - 无法形成返回自身的函数的新实例

javascript - 滚动顶部 : Smooth scroll to ID interferes with back to top

asp.net - KeyDown 事件未触发第二次

javascript - D3 旋转地球仪 : trouble incorporating zoom function

arrays - 如何通过删除 "()"将我的字符串值更改为数组