【发布时间】:2017-09-16 14:09:27
【问题描述】:
我正在创建一个聊天体验,并且页面通过使用 ionic-angular 上的 Content 中的 scrollToBottom 方法来跟上对话。如果我从“PreChat.html”开始并转到“Chat.html”然后我关闭“Chat.html”以返回“PreChat.html”并再次返回“Chat.html”我收到以下错误: “无法读取 null 的属性‘scrollToBottom’”。体验应该可以随时或重复进入。
PreChat.html:
<ion-content>
<button (click)="goToChat()" href="#">
Chat
</button>
</ion-content>
PreChat.ts:
import { Component } from '@angular/core';
import { ModalController } from 'ionic-angular';
import { Chat } from '../chat';
@Component({
selector: 'preChat',
templateUrl: 'preChat.html'
})
export class PreChat {
constructor(private modalCtrl: ModalController){}
goToChat(): any {
let profileModal = this.modalCtrl.create(Chat);
profileModal.present();
}
}
聊天.html:
<ion-content>
<button ion-button="filter-button"(click)="dismiss()">
<ion-icon name="close"></ion-icon>
</button>
<div *ngFor="let convo of conversationArray">
<div class="b-text">{{convo.speak}}</div>
</div>
</ion-content>
聊天.ts:
import { Component, ViewChild } from '@angular/core';
import { Content, Events, ViewController } from 'ionic-angular';
@Component({
templateUrl: 'Chat.html'
})
export class Chat {
@ViewChild(Content) content: Content;
conversationArray: any[] = [];
constructor(private events: Events, private viewCtrl: ViewController){
this.events.subscribe('conversation', convo => {
this.conversationArray = convo;
this.content.scrollToBottom();
})
}
dismiss() {
this.viewCtrl.dismiss();
}
}
【问题讨论】:
-
html中是否提供了名为'content'的id?它需要使用
#content引用,然后您可以尝试this.content.nativeElement.scrollToBottom(),因为它是您所指的本机元素。有关更多详细信息,请查看:stackoverflow.com/questions/39158922/… -
@Deepak,当内容专门引用
时,为什么我需要 id? ionicframework.com/docs/api/components/content/Content -
经过大量搜索后,似乎有一种方法可以使用 ViewChild 在组件之间传递数据,但这并不完全适用于使用离子/角度内容的上下文。话虽如此,我的目的是创建一个基于聊天的底部滚动,如 Ionic 文档中所示。这就是编写大量代码的方式,除了错误和不一致。此链接提供了一个更清晰的解决方案:plnkr.co/edit/…
标签: javascript angular ionic2 angular2-template