这是我在Stack Overflow中的第一个问题。我会尝试具体但我不知道如何保持这个简短,所以这将是一个很长的帖子。对于那个很抱歉。我保证在搜索之前我搜索并尝试了很多东西,但我现在有点迷失了。
我正在Angular 6中开发一个简单的应用程序来跟踪软件必需品和与这些必要条件相关的测试。
最后一个组件的想法是,只要点击“浏览器”列表的必要条件,就会将其添加到当前测试列表中。为了做到这一点,在与浏览器列表的@Output事件关联的回调方法中,我尝试将Requisite接收作为参数添加:
addrequisite(requisite: Requisite) {
this.currentTest.requisites.push(requisite);
console.log('Current test: ');
console.log(this.currentTest);
}
在TestView的HTML部分中,我插入了RequisiteList组件,如下所示:
<app-requisitelist [requisites]="currentTest.requisites" ngModel name="reqlistview"></app-requisitelist>
(ngModel属性是我一直在尝试的事情的一部分,我不确定它是否必要)。
结果是:
我不确定我的问题是数据绑定是否由值构成(我不这么认为,因为我绑定了一个数组,这是一个对象AFAIK),或者表没有检测到数据更改(我试过了)使用ChangeDetector强制进行数据更改检测,或其他任何操作。
您将数组传递给app-requisitelist
组件。此组件等待此阵列更改以更新内容。当你做this.currentTest.requisites.push(requisite)
时,阵列this.currentTest.requisites
不会改变,我的意思是,如果你这样做
const tmp = this.currentTest.requisites;
this.currentTest.requisites.push(requisite)
if (tmp === this.currentTest.requisites) {
console.log('The arrays are the same');
}
您将打印日志。所以,我建议这样做:
addrequisite(requisite: Requisite) {
this.currentTest.requisites.push(requisite);
this.currentTest.requisites = this.currentTest.requisites.map(item => item);
console.log('Current test: ');
console.log(this.currentTest);
}
插入的行强制this.currentTest.requisites
成为具有相同内容的新数组。