我希望在this.items中加载所有消息时执行向下滚动的任务 我正在使用angularfire2
items: FirebaseListObservable<any[]>;
this.items = this.af.database.list('/conversations', {
query: {
orderByChild: 'chatKey',
equalTo: prop + '-' + this.userId
}
})
我想使用如下,但它不起作用。
items: FirebaseListObservable<any[]>;
this.items = this.af.database.list('/conversations', {
query: {
orderByChild: 'chatKey',
equalTo: prop + '-' + this.userId
}
}).then(()=>{
this.scrollToBottom();
})
this.scrollTobottom代码如下所示,适用于其他地方
scrollToBottom(time?) {
setTimeout((data) => {
var element = document.getElementById('123');
element.scrollTop = element.scrollHeight - element.clientHeight;
console.log("element", element);
}, time ? time : 4000);
答案 0 :(得分:1)
由于它是一个可观察对象,你必须使用
this.items = this.af.database.list('/conversations', {
query: {
orderByChild: 'chatKey',
equalTo: prop + '-' + this.userId
}
}).subscribe(data => {/* do things */}, error => {/* do error things */})
或
this.items = this.af.database.list('/conversations', {
query: {
orderByChild: 'chatKey',
equalTo: prop + '-' + this.userId
}
})
.toPromise()
.then(/* ... */)
答案 1 :(得分:1)
我通常使用的方式如下:
this.items = this.af.database.list('/conversations', {
query: {
orderByChild: 'chatKey',
equalTo: prop + '-' + this.userId
}
})
.first().toPromise()
.then(response => {
//code here
})
.catch(error => { //error code here });
当然,不要忘记导入相关的库:(在你的组件\服务中)
import 'rxjs/add/operator/first';
import 'rxjs/Rx' ;
import 'rxjs/add/operator/toPromise';
答案 2 :(得分:1)
简单。只需将您的代码更正为...
items: FirebaseListObservable<any[]>;
let thisChatKey = prop + '-' + this.userId;
this.items = this.af.database.list('/conversations', {
query: {
orderByChild: 'chatKey',
equalTo: thisChatKey
}
}).then(()=>{
this.scrollToBottom();
})