在组件的负载上,我订购了一个数组数组,并在List和Drop Down中显示相同的数组,并且工作正常。 然后我添加了“添加按钮”,它将一个对象添加到数组中,并在列表中显示相同的内容。以角度取消订阅2/4
问题就像是即使当我从订阅退订即使如此,它是增加当我点击添加按钮的值,可以在任何请让我知道为什么发生这种情况
Plunker:https://embed.plnkr.co/CoZCakFsx5q8GBWDBZ24/
下面是我的代码
import {Component} from '@angular/core';
import {PhoneService} from './phone.service'
import { ISubscription } from "rxjs/Subscription";
@Component({
selector:'phone-list',
template:`
<ul>
<li *ngFor='let phone of phones'>
<a [routerLink]="['/phone',phone.id]">
{{phone.name}}
</a>
</li>
</ul>
<select>
<option *ngFor='let phone of phones' value={{phone.name}}>
{{phone.name}}
</option>
</select>
<button (click)='add()'>Add</button>
`
})
export class PhoneListComponent {
private phones;
private phone$:ISubscription
constructor(private ps: PhoneService) {
this.phone$=this.ps.getPhoneDetails()
.subscribe((data)=> {
this.phones=data;console.log(data)
});
}
add() {
this.phone$.unsubscribe();
this.ps.addPhone();
}
}
和服务代码
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/map';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
export interface Phone {
id:number;
name:string;
}
@Injectable()
export class PhoneService {
private phoneList : <Phone>[] = [{
name:'Huwaei',
id:1
},{
name:'Apple',
id:2
}]
getPhoneDetails() {
return Observable.of(this.phoneList);
}
getPhone(id) {
return this.getPhoneDetails().map(phones=>
phones.find(phone=>phone.id==id)
);
}
addPhone() {
this.phoneList.push({name:'dummy',id:3});
}
}
你可以只做rxjs的.first()吗?所以你不必取消订阅和它的只是一个? – misha130
嗨,考虑下次格式化你的代码,如果你想让别人愿意阅读它并帮助你 –