【发布时间】:2017-03-18 00:56:58
【问题描述】:
我对 Angular 2 还很陌生,所以这可能真的很简单。我一直在谷歌搜索,但没有运气。我正在使用 AF2 从 Firebase 中提取玩家数据,然后尝试将列表过滤为 1。我认为我的代码显示了我正在尝试的内容......
player-fb.service.ts
import { Injectable } from '@angular/core';
import { AngularFire, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class PlayerFbService {
players$: FirebaseListObservable<any[]>;
player$: FirebaseObjectObservable<any>;
constructor(private af: AngularFire) {
this.players$ = this.af.database.list('/player');
this.players$.subscribe(
val => {
console.log('players$', val);
}
);
}
filterByHandle(handle: string) {
const handleSubject = new Subject();
this.players$ = this.af.database.list('/player', {
query: {
orderByChild: 'handle',
equalTo: handleSubject
}
});
handleSubject.next(handle);
}
}
该服务有效,我看到了 2 名玩家的初始列表,但是当我点击按钮时,没有任何反应。代码被 def 调用,传入的句柄是列表中的句柄值之一,但列表保持不变。没有变化。
我错过了什么?
编辑:
这是我调用服务的组件的模板...
player.component.html
<ul>
<li *ngFor="let player of players$ | async">
{{ player | json }}
</li>
</ul>
<button (click)="filterByHandle('professorkill')">Filter</button>
player.component.ts
import { Component, OnInit } from '@angular/core';
import { PlayerFbService } from './../../service/fb/player-fb.service';
import { FirebaseListObservable } from 'angularfire2';
@Component({
selector: 'app-player',
templateUrl: './player.component.html',
styleUrls: ['./player.component.css']
})
export class PlayerComponent implements OnInit {
players$: FirebaseListObservable<any[]>;
constructor(private playerService: PlayerFbService) {
this.players$ = this.playerService.players$;
}
filterByHandle(handle: string) {
this.playerService.filterByHandle(handle);
}
ngOnInit() {
}
}
【问题讨论】:
-
这个代码块有点混乱,你是不是在调用 filterByHandle() 方法时试图过滤你的 observable 中的数据?
-
@DevonGermano 正确:-)
-
Firebase 中的列表是否要过滤 /player?还是 /players?
-
您没有共享足够的代码。您的可注入服务中的
players$不能直接在模板中使用,因此模板的players$所指的内容尚不清楚。 -
@cartant 将所有 3 个代码文件添加到 OP。我还需要添加吗?该代码最初确实有效。我确实在显示 2 个玩家记录的页面上看到了 player$ 列表。当您单击过滤器按钮时,列表应更改为仅与
handle = 'professorkill'匹配的一名玩家。这部分不起作用,我不确定如何修复。
标签: angular firebase angularfire2