【发布时间】:2018-04-08 04:18:26
【问题描述】:
我有一个sender 和一个receiver 组件,它们通过data 服务连接。在sender 的模板中,有一个输入字段,我可以输入一个数字,然后单击一个按钮,该数字将发送到receiver 并存储在变量arr 中。在receiver 我有许多对象数组。我需要的是基于用户输入的数字,显示的相关列表中的信息(0:同事,1:客户,2:朋友等)。
我不想在模板上有几个divs,每个都根据arr 的内容进行渲染。我宁愿只有一个 div 为我做这件事。
服务代码:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class DataService {
private defaultArray = new BehaviorSubject<number>(0);
currentArray = this.defaultArray.asObservable();
changeArray (arr: number) {
this.defaultArray.next (arr);
}
constructor() { }
}
发件人代码:
import { Component, OnInit } from '@angular/core';
import { DataService } from '../data.service';
@Component({
selector: 'app-sender',
template: `<button (click)="changeArray(inp.value)">Change Array</button>
<input type='number' #inp>
`,
styleUrls: ['./sender.component.css']
})
export class SenderComponent implements OnInit {
arr: number;
constructor(private data: DataService) { }
changeArray (inp){
this.data.changeArray (inp);
}
ngOnInit() {
this.data.currentArray.subscribe(arr => this.arr= arr);
}
}
接收者代码:
import { Component, OnInit } from '@angular/core';
import { DataService } from '../data.service';
@Component({
selector: 'app-receiver',
template: `
<div>
<ul>
<li *ngFor="let list of listofList[arr]">
{{list.Name}}
</li>
</ul>
</div>
`,
styleUrls: ['./receiver.component.css']
})
export class ReceiverComponent implements OnInit {
arr: number;
Colleagues = [
{
Name:'Jack N',
Age:25,
Title: 'Intern'
},
{
Name:'Susan A',
Age:22,
Title: 'Developer'
},
{
Name: 'Pete Z',
Age:30,
colleagueTitle: 'Bookkeeper'
}
];
Customers = [
{
Name:'Sara B',
State:'CA',
badCredit: false
},
{
Name: 'Donald F',
State: 'WA',
badCredit: false
}
];
Friends = [
{
Name: 'Carl G',
foodRequirement: 'Gluten-free Bread'
},
{
Name: 'Filipa O',
foodRequirement: 'Low-lactose milk'
},
{
productCode: 'DER5509',
productName: 'Dark Chocolate'
}
]
listofList =[this.Colleagues, this.Customers, this.Products];
constructor(private data: DataService) { }
ngOnInit() {
this.data.currentArray.subscribe()
}
}
我已经测试过,我可以看到组件之间的通信工作正常。但是,通过发送和接收新的数组编号 (arr),仍会显示默认列表。虽然我希望在 arr 的值之后显示一个新列表。
能否请您查看我的代码并帮助我找出问题所在?
【问题讨论】:
-
您发布的代码到底有什么问题?
-
通过发送和接收新的数组编号(arr),仍然显示默认列表。我想在 arr 的值之后显示一个新列表。
-
如果您的目标是只显示一个数组,为什么要在接收器组件中使用
*ngFor? -
什么意思?我已经使用
*ngFor遍历整个数组并显示数据。 -
好的,我知道你在这里要做什么,我已经发布了一个 asnwer
标签: angular