Angular 2获取Input元素值

时间:2017-03-16 05:39:51

标签: angular typescript ionic2

如何使用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);
    }
  }

重复相同的日期值。我希望不重复相同的日期值。

因为我会检查两个变量。

所以我需要chat.date值。因为我绑定了input的值。但是我无法获得input元素的值。

我收到此错误

无法读取未定义

的属性“nativeElement”

如何解决这个问题。或者找到其他任何方法。

由于

6 个答案:

答案 0 :(得分:21)

我创建了一个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);
  }
}

答案 1 :(得分:6)

使用此代码

@ViewChild('myname') input:any; 

ngAfterViewInit() {
 console.log(this.input.nativeElement.value) ;      
}

答案 2 :(得分:1)

您的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,则会从DOM中删除html元素以及外部div容器。检查here   这就是您的ViewChild未定义的原因。您需要检查组件中的相同条件,或重新考虑访问组件中元素的逻辑。 试试这个:

ngAfterContentInit() {
    console.log(this.input.nativeElement.value);
    }

答案 3 :(得分:1)

如果您使用指令 尝试这种方式:

private el: HTMLInputElement;
constructor(private _elementRef: ElementRef) {
    this.el = this._elementRef.nativeElement;
}

ngOnInit(): void {
    console.log(this.el.value);
}

答案 4 :(得分:0)

使用ngModal

根据您的代码,我做了一些小改动以使用ngModal。见this

&#13;
&#13;
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);
    }
  }
&#13;
<input [(ngModel)]="myname" type="hidden" value="John Doe">
&#13;
&#13;
&#13;

答案 5 :(得分:0)

如果有人对如何检查nativeElement内是否有空数据感兴趣,请使用textContent属性。

假设我们从nativeElement.outerHTML得到以下HTML输出:

<div _ngcontent-c8="" checkifelementempty="" class="some-class">
  <div _ngcontent-c8="">
     <b><i>&nbsp;a</i></b>
  </div>
</div>

要检查以上HTML是否包含空文本,请使用以下命令: !nativeElement.textContent.trim()