ionic 2を使用してhtml要素の値を取得する方法
私のhtmlコードの下
<div class="messagesholder" *ngFor="let chat of chatval | orderby:'[date]'" >
<div *ngIf="chat.sender == currentuser || chat.receiver == currentuser">
<div *ngIf="chat.date" style="text-align: center;" >
<p style="font-size:9px;" id="amount" #amount>{{chat.date | amDateFormat:'LL'}}</p>
<input #myname [ngModel]="range" (ngModelChange)="saverange($event)"/>
<input #myname type="text" value={{chat.date}}>
</div>
</div>
<div class="message" *ngIf="chat.sender == currentuser || chat.receiver == currentuser" [ngClass]="{'me': currentuser == chat.sender}">
<div class='image' *ngIf="chat.path" >
<img *ngIf="chat.path" [src]="chat.path"/><br>
<span *ngIf="chat.path_text">{{chat.path_text}}</span>
<span style="font-size:9px;">{{chat.date | amDateFormat:'hh:mmA'}}</span>
</div>
<div *ngIf="chat.message_text">
<span>{{chat.message_text}}</span>
<span style="font-size:9px;">{{chat.date | amDateFormat:'hh:mmA'}}</span>
</div>
</div>
Tsファイルの下
import { Component,Inject,ViewChild,ElementRef,AfterViewInit} from '@angular/core';
export class ChatPage implements AfterViewInit {
@ViewChild('myname') input:ElementRef;
constructor(public modalCtrl: ModalController,public navCtrl: NavController) {}
ngAfterViewInit() {
console.log(this.input.nativeElement.value);
}
}
同じ日付値が繰り返されています。同じ日付値は繰り返されません。
2つの変数をチェックするからです。
入力値をバインドしたため、chat.date value。が必要ですが、入力要素の値を取得できません。
このエラーが発生しています
未定義のプロパティ 'nativeElement'を読み取れません
この問題を解決する方法、または他の方法で解決策を見つける方法。
ありがとう
Plnkrリンクを作成しました: https://plnkr.co/edit/49TEP8lB4lNJEKsy3IDq?p=preview
それは私のために働いているので、おそらくあなたはあなた自身のplnkrを作成してpplが助けることができるかもしれません
export class ApiDemoApp{
root = ApiDemoPage;
@ViewChild('myname') input:ElementRef;
constructor() {
}
ngAfterViewInit() {
console.log(this.input.nativeElement.value);
}
}
このコードを使用
@ViewChild('myname') input:any;
ngAfterViewInit() {
console.log(this.input.nativeElement.value) ;
}
input
要素は*ngIf
条件に依存します。
<div *ngIf="chat.sender == currentuser || chat.receiver == currentuser">
<div *ngIf="chat.date" style="text-align: center;" >
<input #myname [ngModel]="range" (ngModelChange)="saverange($event)"/>
<input #myname type="text" value={{chat.date}}>
</div>
ngIf
は、DOMを直接操作します。値がfalseの場合、html要素と外側のdivコンテナがDOMから削除されます。 here を確認してください。これがViewChild
が未定義である理由です。コンポーネントで同じ条件を確認するか、コンポーネントの要素にアクセスしているロジックを再検討する必要があります。これを試して:
ngAfterContentInit() {
console.log(this.input.nativeElement.value);
}
ngModel を使用します。
コードに基づいて、ngModalを使用するために小さな変更を加えました。 this を参照してください。
import { Component,Inject,ViewChild,ElementRef,AfterViewInit} from '@angular/core';
export class ChatPage implements AfterViewInit {
myname: string;
constructor(public modalCtrl: ModalController,public navCtrl: NavController) {}
ngAfterViewInit() {
console.log(this.myname);
}
}
<input [(ngModel)]="myname" type="hidden" value="John Doe">
NativeElementに空のデータがあるかどうかを確認する方法に興味がある場合は、textContent
プロパティを使用します。
nativeElement.outerHTML
から次のHTML出力があるとします。
<div _ngcontent-c8="" checkifelementempty="" class="some-class">
<div _ngcontent-c8="">
<b><i> a</i></b>
</div>
</div>
上記のHTMLに空のテキストがあるかどうかを確認するには、!nativeElement.textContent.trim()
を使用します