1. 程式人生 > >Angular開發(十二)-自定義指令

Angular開發(十二)-自定義指令

在第四章的時候我們學習了angular的通用指令(通用指令地址),本章中我們自定義指令。

本人理解自定義指令是擴充套件傳統的HTML語法,類似傳遞HTML語法中的class,style,id

自定義指令分下列幾種

  • 1、屬性指令
    • 普通的屬性指令
    • 為指令繫結輸入
    • 響應使用者操作
  • 2、結構指令

一、新建一個工程,建立基本的結構


  • ng new directivedemo 建立工程
  • ng g directive mydirective/mydir1 在一個指令資料夾下建立一個mydir1指令
  • ng g component dirdemo01 建立一個demo元件
使用angular-cli
建立就不需要手動去app.module.ts模組試圖類中新增自己建立的指令Mydir1Directive

二、普通的屬性指令的使用

import {Directive, ElementRef} from '@angular/core';

@Directive({
  selector: '[appMydir1]' //appMydir1表示指令名稱
})
export class Mydir1Directive {
  //ElementRef表示真實的Dom元素
  constructor(el:ElementRef) {
      el.nativeElement.style.backgroundColor = "#f00"
; } }
//html程式碼中使用
<p appMydir1>
  dirdemo01 works!
</p>

三、為指令繫結輸入

這種方式相對於上面那種方式更加的靈活,外面傳遞引數進去(簡單的是元件間的資料互動)

import {Directive, ElementRef, Input} from '@angular/core';

@Directive({
  selector: '[appMydir1]',
  //inputs:['appMydir1']
})
export class Mydir1Directive {
  private _defaultColor='green'
; private el:HTMLElement; @Input("appMydir1") //這個也可以刪除把inputs:['appMydir1']放出來 set appMydir1(colorName:string){ console.log(colorName); this.setStyle(colorName); }; constructor(el:ElementRef){ this.el=el.nativeElement; this.setStyle(this._defaultColor); } private setStyle(color:string){ this.el.style.backgroundColor=color; } }
//html程式碼
<p [appMydir1]="colorName">
  dirdemo01 works!
</p>
<input type="button" value="紅色" (click)="colorName='red'"/>
<input type="button" value="綠色" (click)="colorName='#360'"/>
<input type="button" value="藍色" (click)="colorName='blue'"/>

四、響應使用者操作

@HostListener裝飾器指向使用屬性指令的DOM元素,使得DOM元素的事件與指令關聯起來

import {Directive, ElementRef, Input, HostListener} from '@angular/core';

@Directive({
  selector: '[appMydir2]',
  inputs:['appMydir2']
})
export class Mydir2Directive {
  private _defaultColor = "yellow";
  private el: HTMLElement;

  private backgroundColor:string;
  //@Input("appMydir2") backgroundColor:string;

  constructor(el:ElementRef) {
    this.el = el.nativeElement;
    this.setStyle(this._defaultColor);
  }

  @HostListener("click") onClick(){
    this.setStyle(this.backgroundColor || this._defaultColor);
  }
  setStyle(color:string){
    this.el.style.backgroundColor = color;
  }
}
//html程式碼
<p [appMydir2]="'red'">
  dirdemo01 works!
</p>

五、結構指令,angular中結構指令是指對DOM新增與刪除類似ngIf這樣的

現在模擬ngIf的功能

需要注入這兩個服務
* TemplateRef可以用來訪問元件中的模板
* ViewContainerRef可作為試圖內容渲染器

//自定義指令的程式碼
import {Directive, TemplateRef, ViewContainerRef} from '@angular/core';

@Directive({
  selector: '[appMydir3]',
  inputs:["appMydir3"]
})
export class Mydir3Directive {
  set condition(newCondition:boolean){
    if(newCondition){
      this.viewContainer.createEmbeddedView(this.templateRef);
    }else {
      this.viewContainer.clear();
    }
  }
  constructor(
    private templateRef:TemplateRef<any>,
    private viewContainer:ViewContainerRef
  ){}

}
//html程式碼
<div class="box" *appMydir3="true"></div>
<div class="box" *appMydir3="false"></div>

相關推薦

Angular開發()-定義指令

在第四章的時候我們學習了angular的通用指令(通用指令地址),本章中我們自定義指令。 本人理解自定義指令是擴充套件傳統的HTML語法,類似傳遞HTML語法中的class,style,id

獻給初學iOS的小盆友們——微博app專案開發定義cell程式碼補全

上節課我們主要講解了我們是怎麼一步一步把自定義cell打通的,主要方法就是引入了MVVM檢視模型,這樣我們就可以利用檢視模型就提前把各個子控制元件的frame都計算好了。今天我們就是講如何計運算元控制元件frame,以及補全原創微博和轉發微博的設計。 本節內容

angularJS學習之路(三)---定義指令---templateUrl

第一種寫法: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&

angular 許可權控制 service+ 定義指令(改寫ngIf)

功能說明:許可權控制1. 先建立一個service,使用者獲取使用者資訊2. 然後自定義一個結構指令directive(改寫ngIf指令): 傳入需要的許可權,根據呼叫service獲取的使用者資訊,判斷是否有許可權,如果有許可權,則顯示,無許可權,則不顯示建立service

hadoop深入研究:()——定義Writable

自定義Writablehadoop雖然已經實現了一些非常有用的Writable,而且你可以使用他們的組合做很多事情,但是如果你想構造一些更加複雜的結果,你可以自定義Writable來達到你的目的,我們以註釋的方式對自定義Writable進行講解(不許說我只帖程式碼佔篇幅哦,姿

angular創建定義指令的四種方式

htm mil 成功 評論 utf-8 例如 angularjs size 限制   angular除了內置的部分指令,還可以通過.directive來自定義指令。要調用自定義指令,HTML 元素上需要添加自定義指令名。使用駝峰法來命名一個指令:nsHeader,在調用時使

angular 定義指令 詳解--restrict、restrict、replace

emp bold span 類型 ret space con 設置 註意 Angularjs 允許根據實際業務需要自定義指令, 通過angular全局對象下的 directive 方法實現。可以自定義屬性、自定義標簽、自定義功能 接下來定義一個名叫custom的指令,並利用

Angular-定義指令-下

接下來 -h 模塊 use 相互 讓我 model too 服務 自定義指令學習有段時間了,學了些紙上談兵的東西,還沒有真正的寫個指令出來呢。。。所以,隨著學習的接近尾聲,本篇除了介紹剩余的幾個參數外,還將動手結合使用各參數,寫個真正能用的指令出來玩玩。   我們在自定義指

angular 定義指令詳解 Directive

聲明 其他 原型繼承 創建 tool 兩個 模板 變化 組合 廢話不多說,下面就直接上代碼 //angular指令的定義,myDirective ,使用駝峰命名法 angular.module(‘myApp‘, []) .directive(‘myDirective‘,

angular指令詳解--定義指令

修飾 cor ring ttr 子元素 標簽 常用 文本 利用 自定義指令 directive()這個方法是用來定義指令的: angular.module(‘myApp‘, []) .directive(‘myDirective‘, function ($timeout,

Angular17 Angular定義指令

分類 dto end sel 數據 str too rdm cor 1 什麽是HTML   HTML文檔就是一個純文本文件,該文件包含了HTML元素、CSS樣式以及JavaScript代碼;HTML元素是由標簽呈現,瀏覽器會為每個標簽創建帶有屬性的DOM對象,瀏覽器通過渲染

C++語言學習()——定義內存管理

single null allocated 析構函數 opera .get cat st2 argc C++語言學習(二十)——自定義內存管理 一、統計類對象中成員變量的訪問次數 mutable是為了突破const函數的限制而設計的,mutable修飾的成員變量將永遠處於可

009-Ambari開發之新增定義元件Redis()

上一篇我們主要介紹了Ambari新增元件的答題流程並以REDIS為例說明了流程,本篇在上一篇的基礎上,進一步完善說明流程並介紹如何給元件新增metric 掃描二維碼,關注BearData,獲取最新文章 上篇中,我們已經制作出了redis的rpm包,並重新編譯了我們修改後的Ambar

008-Ambari開發之新增定義元件Redis(一)

Ambari目前支援的元件有HDFS、YARN、HBase、Hive、Pig、ZooKeeper、Sqoop、Storm、Flume、Tez、Oozie、Falcon、Storm、Altas、Knox、Spark、Ranger、Mahout、Kerberos等,已經涵蓋了從大資料應用的

SpringCloud(定義eureka-client服務列表

當我們不需要從eureka等獲取服務列表時,可以自己指定服務列表。 ribbon: eureka: #禁用eureka ribbon enabled: false eureka-servi

android藍芽4.0BLE及2.0 2.1 apk 串列埠助手帶16個定義按鍵和定義指令 字元接收 六進位制或字元傳送

android藍芽4.0BLE apk 帶16個自定義按鍵和自定義指令 字元接收 https://pan.baidu.com/s/1eRSfprO android藍芽2.0 2.1 apk 帶16個自定義按鍵和自定義指令 字元接收  帶自動連線 https://pan.b

angular定義指令使用$compile動態生成html

<script> angular .module(‘app‘) .controller(‘SampleCtrl‘, function ($scope, $filter) { $scope.open

Angular定義指令之compile, link, controller屬性詳解及例項演示

本文章主要就angularjs指令中的compile,link及controller函式的使用和區別進行詳細討論。以下是本文的結構: directive的執行原理 compile用法 link 用法 controller 用法 compile,link及co

支付寶小程式開發練習,顯示定義維碼(四)

之前用了幾種方式 1.後端生成二維碼需要加密的字元竄,小程式前端利用二維碼元件渲染canvas畫出二維碼,由於支付寶小程式沒有這樣的元件,於是去找微信小程式的解決方案,把微信小程式的二維碼前端元件搬過來用,除錯到不報錯了,結果二維碼顯示不出來,原因很難找,宣告失敗! 2.

從零開始學 Web 之 Vue.js()過濾器,按鍵修飾符,定義指令

大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 部落格園:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/