【发布时间】:2023-06-15 01:26:01
【问题描述】:
我正在使用 Electron 和 Node 使用 Angular 2 创建一个应用程序。在服务器上运行一些测试,结果会一一输出到名为 testResults 的全局变量数组中。我可以使用以下方法将其拉入 Angular:
declare var testResults: any;
然而,当一个对象被添加到数组中时,我没有让 Angular 触发一个事件。有没有办法可以观察这个数组的变化?我试过 onChanges 和 doCheck 但没有运气。
这是我的组件:
import {Component, Input, OnChanges, SimpleChange, OnInit} from 'angular2/core';
declare var testResults: any;
@Component({
selector: 'test-results',
template: `{{ testResultsItem }}
`,
})
export class TestResultsComponent implements OnChanges{
@Input () testResultsItem = testResults;
ngOnChanges(changes: {[ propName: string]: SimpleChange}) {
console.log('Change detected:', changes[this.testResultsItem].currentValue);
console.log(this.testResultsItem);
}
}
当我运行 setInterval 每秒在控制台中记录该数组时,我确实在控制台中看到了对数组的更改。它们还在 {{testResults}} 下的 DOM 中更新。但是应该有一种方法可以让 Angular 检测到这种变化,而不是运行 setInterval,对吗?任何帮助,将不胜感激!
这是我尝试使用 IterableDiffers 的时间:
import {Component, Input, OnChanges, SimpleChange, OnInit, IterableDiffers, ChangeDetectorRef, IterableDiffer, Directive, DoCheck} from 'angular2/core';
declare var testResults: any;
@Component({
selector: 'test-results',
template: `{{ testResultsItem | json }}
`,
inputs: ['testResults']
})
export class TestResultsComponent implements DoCheck{
private testResultsItem = testResults;
private differ:IterableDiffer;
constructor(private changeDetector:ChangeDetectorRef, private differs:IterableDiffers) {
this.differ = differs.find([]).create(null);
}
set testReults(test:any) {
this.testResultsItem = test;
if (test && !this.differ) {
this.differ = this.differs.find(test).create(this.changeDetector);
}
}
ngDoCheck(){
if (this.differ) {
const changes = this.differ.diff(this.testResultsItem);
if (changes) {
console.log('FIRE!');
}
}
}
}
-
Angular 不检查对象或数组内部的变化。它只检查对象引用是否已检查。您可以使用
IterableDiffer
检查ngDoCheck
中的更改。请发布演示您尝试过的代码的代码。更改testResults
的代码在哪里? -
testResults 在索引中链接的 main.js 文件中创建。从那里调用一个名为reporter.js 的js 文件,该文件返回数组中的对象。我尝试使用 IterableDiffer 来实现:不幸的是,我仍然没有让它启动。我将上面的代码添加到原始帖子中。