เข้าถึงตัวแปรอ้างอิงเทมเพลตจากคลาสคอมโพเนนต์


108
<div>
   <input #ipt type="text"/>
</div>

เป็นไปได้ไหมที่จะเข้าถึงตัวแปรการเข้าถึงเทมเพลตจากคลาสคอมโพเนนต์

กล่าวคือฉันสามารถเข้าถึงได้ที่นี่

class XComponent{
   somefunction(){
       //Can I access #ipt here?
   }
}

คำตอบ:


152

นั่นเป็นกรณีการใช้งานสำหรับ@ViewChild:

https://angular.io/docs/ts/latest/api/core/index/ViewChild-decorator.html

class XComponent {
   @ViewChild('ipt', { static: true }) input: ElementRef;

   ngAfterViewInit() {
      // this.input is NOW valid !!
   }

   somefunction() {
       this.input.nativeElement......
   }
}

นี่คือการสาธิตที่ใช้งานได้:

https://stackblitz.com/edit/angular-viewchilddemo?file=src%2Fapp%2Fapp.component.ts


แต่ในการดีบักฉันได้รับสิ่งนี้อินพุตตัวเองเป็นไม่ได้กำหนด
jackOfAll

ดังที่ฉันได้กล่าวไปแล้วมันใช้ได้เฉพาะหลังจากเหตุการณ์ngAfterViewInit()ถูกไล่ออก คุณต้องนำเข้าViewChildจาก '@ angular / core` ..
mxii

แต่เราจะกำหนดมูลค่าได้อย่างไร? ฉันพยายามthis.ipt.nativeElement.setAttribute('value', 'xxx');แล้วแต่ไม่มีอะไรเกิดขึ้น และไม่มีวิธีการใดเช่นvalue()หรือsetValue()แม้ว่าฉันจะประกาศว่าเป็นประเภท HTMLInputElement ก็ตาม (ฉันใช้สิ่งนี้ตามคำใบ้ / เติมข้อความอัตโนมัติของ IDE) ในกรณีของฉันฉันไม่สนใจเกี่ยวกับการอ่านค่า ฉันแค่ต้องตั้งค่าต่างๆ
MrCroft

ขณะนี้อยู่ในช่วงวันหยุด .. คุณได้ลองsetPropertyด้วยหรือไม่?
mxii

1
ไม่ควรthis.input.nativeElement.value = 'test'ทำงาน?! อาจมีพฤติกรรมพิเศษกับรูปแบบและการผูกมัด
mxii
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.