首頁 > web前端 > js教程 > 主體

淺析Angular中的自訂結構型/屬性型指令

青灯夜游
發布: 2023-01-14 19:17:03
轉載
2334 人瀏覽過

Angular指令分為三種,元件(含範本指令)、結構型指令(改變宿主文件結構)、屬性型指令(改變宿主行為),以下主要介紹自訂結構型指令和自訂屬性型指令。

淺析Angular中的自訂結構型/屬性型指令

一、自訂結構型指令

一個元素上只能放一個結構型指令,結構型指令的書寫形式為*指令名,*是一個語法糖,如下代碼:

<div *ngIf=""></div>
<!-- 等价于 -->
<ng-template [ngIf]="">
  <div></div>
</ng-template>
登入後複製

以下自訂一個結構型指令,當給指令輸入superadmin和admin時,DOM節點顯示,否則移除節點。 【相關教學推薦:《angular教學》】

@Directive({
  selector: &#39;[appLogin]&#39;
})
export class LoginDirective implements OnInit{
  @Input(&#39;appLogin&#39;) user=""
  constructor(private VCR: ViewContainerRef,private TPL: TemplateRef<any>) { 
  //在指令的构造函数中将 TemplateRef 和 ViewContainerRef 注入成私有变量。
  }
  ngOnInit(){
    if(this.user==&#39;superadmin&#39;||this.user=="admin"){
      this.VCR.createEmbeddedView(this.TPL)
    }else{
      this.VCR.clear()
    }
  }
}
登入後複製
<div *appLogin="&#39;superadmin&#39;">超级管理员</div>
<div *appLogin="&#39;admin&#39;">管理员</div>
<div *appLogin="&#39;user&#39;">普通会员</div>
登入後複製

效果:
淺析Angular中的自訂結構型/屬性型指令
二、自訂屬性型指令

#使用屬性型指令,可以更改DOM 元素和Angular 元件的外觀或行為。

1、從 @angular/core 導入 ElementRef。 ElementRef 的 nativeElement 屬性會提供宿主 DOM 元素的直接存取權。

2、在指令的 constructor() 中加入 ElementRef 以注入對宿主 DOM 元素的引用,該元素就是 appColor 的作用目標。

3、在ColorDirective 類別中加入邏輯,在不同輸入條件下,背景分別展現為紅色、綠色、藍色

@Directive({
  selector: &#39;[appColor]&#39;
})
export class ColorDirective implements OnInit{
  @Input() appColor=""
  constructor(private ele:ElementRef) { 
    
  }
  ngOnInit(){
    if (this.appColor == &#39;superadmin&#39;){
      this.ele.nativeElement.style.backgroundColor="red"
    } else if (this.appColor == &#39;admin&#39;) {
      this.ele.nativeElement.style.backgroundColor = "green"
    }else{
      this.ele.nativeElement.style.backgroundColor = "blue"
    }
  }
}
登入後複製
<div [appColor]="&#39;superadmin&#39;">超级管理员</div>
<div [appColor]="&#39;admin&#39;">管理员</div>
<div [appColor]="&#39;user&#39;">普通会员</div>**
登入後複製
淺析Angular中的自訂結構型/屬性型指令效果:

更多程式相關知識,請造訪:###程式設計影片###! ! ###

以上是淺析Angular中的自訂結構型/屬性型指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!