我的服務回報兩個項目的名單,我想呈現每個列表差異選擇可能有兩個模板在AngularJS單一呼叫服務2
this.http.get(url).map(res => res.json())
的JSON返回{ list1: [...], list2: [...] }
和我有兩個<div>
呈現list1
和list2
。
是否可以使用Angular JS 2?
我的服務回報兩個項目的名單,我想呈現每個列表差異選擇可能有兩個模板在AngularJS單一呼叫服務2
this.http.get(url).map(res => res.json())
的JSON返回{ list1: [...], list2: [...] }
和我有兩個<div>
呈現list1
和list2
。
是否可以使用Angular JS 2?
class MyService {
private _list1;
private _list2;
getList1() {
if(this._list1) {
return Observable.of(this._list1);
} else {
return _getList(1);
}
}
getList2() {
if(this._list2) {
return Observable.of(this._list2);
} else {
return _getList(2);
}
}
private _getList(listNo) {
return this.http.get(url).map(res => {
var json = res.json();
this._list1 = value.list1;
this._list2 = value.list2;
if(listNo == 1) {
return json.list1;
}
if(listNo == 2) {
return json.list2;
}
});
}
}
@Component({
selector: 'my-component1',
pipes: [KeysPipe],
template: `
<ul>
<li *ngFor="let item of list | keys">{{item.key}} - {{item.value}}</li>
</ul>
`
})
export class MyComponent1 {
constructor(private MyService myService) {
myService.getList1().subscribe.(value => this.list = value);
}
}
@Component({
selector: 'my-component2',
pipes: [KeysPipe],
template: `
<ul>
<li *ngFor="let item of list | keys">{{item.key}} - {{item.value}}</li>
</ul>
`
})
export class MyComponent2 {
constructor(private MyService myService) {
myService.getList2().subscribe.(value => this.list = value);
}
}
如果你想呈現兩個列表在同一組件可以簡化過程的。
爲KeysPipe
看到access key and value of object using *ngFor
我不知道你是怎麼觸發呼籲您的要求。例如,另一個組件。
您還可以在您的服務中定義兩個EventEmitter
屬性(每個列表一個),以在您的HTTP調用的響應存在時發出事件。數據在那裏時,兩個組件可以訂閱。
服務實現
export class ListService {
list1Event: EventEmitter<any> = new EventEmitter();
list2Event: EventEmitter<any> = new EventEmitter();
getLists() {
return this.http.get(url).map(res => res.json())
.subscribe(
(data) => {
this.list1Event.emit(data.list1);
this.list2Event.emit(data.list2);
}
);
}
}
組件#1實施
@Component({
selector: 'my-component1',
template: `
<ul>
<li *ngFor="#item of list">{{item.name}}</li>
</ul>
`
})
export class MyComponent1 {
constructor(private service:ListService) {
this.service.list1Event.subscribe.(data => {
this.list = data;
});
}
}
元器件#2執行(類似但對於列表2)
組件觸發的執行HTTP調用
@Component({
selector: 'other-component',
template: `
<div (click)="executeRequest()">Execute request</div>
`
})
export class OtherComponent {
constructor(private service:ListService) {
}
executeRequest() {
this.service.getLists();
}
}
詳情請參閱此問題:
EventEmitter不會在MyComponent上觸發。我認爲服務對象不是每個組件中的實例 請參閱http://plnkr.co/edit/sd8FvFva428g4gibRXKP?p=preview – tarn
是的,您需要在引導應用程序時指定它以共享相同的實例。 .. –
是的,它是。但與單一列表的做法應該沒有多大區別。什麼阻止你回來? – acdcjunior
您可以爲子組件,[輸出]和事件發射器對父組件執行[輸入]以接收它們,還是它是您的應用程序中另一個完全獨立的部分?如果是這種情況,您可以使用redux-store或使用observable並觀察對象的更改以更新應用程序的不同部分。如果你想這樣做,請確保將它添加到引導程序中,以便在應用程序中只有一個實例。 –