Angular - 範本參考變數(Template reference variables)

  • 2834
  • 0

紀錄範本參考變數(Template reference variables)的兩種用法

在Template裡面(component.html),在任意的標籤(HTML標籤 或是 使用中的Directive)上使用 #自訂名稱

#自訂名稱 裡面定義的名稱在template 內必須唯一且 不可跟component.ts內的定義的變數(property)相同,

否則會錯誤(保哥建議可以前面加個t來當命名規則) 

會在Template內建立一個 #自訂名稱 的區域變數,只能用於目前元件的範本之中(component.html)

#自訂名稱將會儲存該標籤的DOM物件 ,

這樣就可以透過 事件繫結(event binding) 將DOM物件內的任意屬性傳回component.ts內

除了 #自訂名稱 之外,也可以使用 ref-自訂名稱 (# 是語法糖)

 

用法一: 在一般的HTML 標籤上面使用範本參考變數(template reference variable) 

就可以直接代表這個DOM物件

舉例來說

<dir>
    <input type="text" #tKeyWord name="" id="" placeholder="請輸入關鍵字" (keyup)="secondChangeWord($event)">
    <span>目前字元:{{secondKeyWord.length}}</span>
    <br>
    <span>使用範本參考變數:{{tKeyWord.value.length}}</span>
</dir>

在<input> 裡面我設定了 #tKeyWord  ,在這個template 裡面就可以代表這個DOM

在下面我就可以使用 {{tKeyWord .value.length}} 來取得這個input DOM 輸入的長度

 

用法二: 在使用中的Directive上使用範本參考變數(template reference variable) 

放在Directive上面的話,就代表這個Directive背後的component,可以使用component內的Property

首先定義一個簡單的component:header

template:

<div>
    <span>{{headertitle}}</span>
</div>

component.ts:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-header',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
  headertitle = '';

  constructor() {
    this.headertitle = 'This is Header Title!';
  }

  ngOnInit() {}
}

 

然後使用上面的Directive,並且設定一個 template reference variable: #tHeader

最後在div 中設定一個click 事件,就可以直接透過 template reference variable: #tHeader 去更改app-header的proerrty

<app-header #tHeader></app-header>

<div (click)="tHeader.headertitle = 'Change Header Title'">
    <input type="text" #tKeyWord name="" id="" placeholder="請輸入關鍵字" (keyup)="secondChangeWord($event)">
    <span>目前字元:{{secondKeyWord.length}}</span>
    <br>
    <span>使用範本參考變數:{{tKeyWord.value.length}}</span>
</div>