最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Angular17之Angular自定義指令詳解

 更新時間:2018年01月21日 11:45:24   作者:NeverCtrl_C  
這篇文章主要介紹了Angular17之 Angular自定義指令的相關(guān)知識 ,需要的朋友可以參考下

1 什么是HTML

  HTML文檔就是一個純文本文件,該文件包含了HTML元素、CSS樣式以及JavaScript代碼;HTML元素是由標(biāo)簽呈現(xiàn),瀏覽器會為每個標(biāo)簽創(chuàng)建帶有屬性的DOM對象,瀏覽器通過渲染這些DOM節(jié)點來呈現(xiàn)內(nèi)容,用戶在瀏覽器中看到的內(nèi)容就是瀏覽器渲染DOM對象后的結(jié)果。

2 指令的分類

  組件、屬性指令、結(jié)構(gòu)性指令

3 指定義指令常用到的一些常量

  3.1 Directive

    用于裝飾控制器類來指明該控制器類是一個自定義指令控制器類

  3.2 ElementRef

    作為DOM對象的引用使用,通過構(gòu)造器進(jìn)行依賴注入,它的實例代表標(biāo)注有自定義指令那個元素的DOM對象;每個標(biāo)注了自定義指令的元素都會自動擁有一個ElementRef對象來作為該元素DOM對象的引用(前提:在自定義指令的控制器中依賴注入了ElementRef)

  3.3 Render2

    Render2的實例是用來操作DOM節(jié)點的,因為Angular不推薦直接操作DOM節(jié)點;Render2是從Angular4才開始支持的,之前的版本是使用的Render;每個標(biāo)注有自定義指令的元素都會擁有一個Render2實例來操作該元素的DOM屬性(前提:在自定義指令的控制器中依賴注入了Render2)

  3.4 HostListener

    用于裝飾事件觸發(fā)方法的注解

4 自定義屬性指令

  一個自定義的屬性指令需要一個有@Directive裝飾器進(jìn)行裝飾的控制器類

import { Directive } from '@angular/core';
@Directive({
 selector: '[appDirectiveTest02]'
})
export class DirectiveTest02Directive {
 constructor() { }
}

4.1 實現(xiàn)自定義屬性指令

    4.1.1 創(chuàng)建自定義屬性指令控制類

      技巧01:創(chuàng)建一個模塊來專門放自定義指令

ng g d directive/test/directive-test02 --spec=false --module=directive

    4.1.2 在控制器類中依賴注入ElementRef   

constructor(
 private el: ElementRef
 ) {}

    4.1.3 通過ElementRef實例改變標(biāo)有自定義指令元素對應(yīng)的DOM對象的背景顏色 

 ngOnInit() {
 this.el.nativeElement.style.backgroundColor = 'skyblue';
 }

    4.1.3 在自定義指令模塊中指定exports 

     

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DirectiveTest01Directive } from './test/directive-test01.directive';
import { SharedModule } from '../shared/shared.module';
import { DirectiveTest02Directive } from './test/directive-test02.directive';
@NgModule({
 imports: [
 CommonModule
 ],
 declarations: [
 DirectiveTest01Directive,
 DirectiveTest02Directive],
 exports: [
 DirectiveTest01Directive,
 DirectiveTest02Directive
 ]
})
export class DirectiveModule { }

    4.1.4 將自定義指令模塊導(dǎo)入到需要用到指定指令的組件所在的模塊中

      技巧01:自定義指令一般會被多次用到,所以一般會將自定義指令模塊導(dǎo)入到共享模塊在從共享模塊導(dǎo)出,這樣其它模塊只需要導(dǎo)入共享模塊就可以啦

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { 
 MdToolbarModule,
 MdSidenavModule,
 MdIconModule,
 MdButtonModule,
 MdCardModule,
 MdInputModule,
 MdRadioModule,
 MdRadioButton
 } from '@angular/material';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { DirectiveModule } from '../directive/directive.module'; 
@NgModule({
 imports: [
 CommonModule,
 RouterModule,
 FormsModule,
 ReactiveFormsModule,
 HttpModule,
 MdToolbarModule,
 MdSidenavModule,
 MdIconModule,
 MdButtonModule,
 MdCardModule,
 MdInputModule,
 DirectiveModule,
 MdRadioModule
 ],
 declarations: [],
 exports: [
 CommonModule,
 RouterModule,
 FormsModule,
 ReactiveFormsModule,
 HttpModule,
 MdToolbarModule,
 MdSidenavModule,
 MdIconModule,
 MdButtonModule,
 MdCardModule,
 MdInputModule,
 DirectiveModule,
 MdRadioButton
 ]
})
export class SharedModule { }

    4.1.5 在組件中使用自定組件對應(yīng)的選擇器即可

      自定義指令的選擇器是由@Directive裝飾器的selector元數(shù)據(jù)指定的

 在元素中直接標(biāo)注自定義指令的選擇器就行啦  

    

<div class="panel panel-primary">
 <div class="panel panel-heading">實現(xiàn)自定義屬性指令</div>
 <div class="panel-body">
 <button md-raised-button appDirectiveTest02>實現(xiàn)自定義指令的按鈕</button>
 <br /><br />
 <button md-raised-button>未實現(xiàn)自定以指令的按鈕</button>
 </div>
 <div class="panel-footer">2018-1-20 22:47:06</div>
</div>

    4.1.6 代碼匯總

import { Directive, ElementRef } from '@angular/core';
import { OnInit } from '../../../../node_modules/_@angular_core@4.4.6@@angular/core/src/metadata/lifecycle_hooks';
@Directive({
 selector: '[appDirectiveTest02]'
})
export class DirectiveTest02Directive implements OnInit {
 constructor(
 private el: ElementRef
 ) {}
 ngOnInit() {
 this.el.nativeElement.style.backgroundColor = 'skyblue';
 }
}

  4.2 給自定義屬性指令綁定輸入屬性

    在4.1中實現(xiàn)的自定義屬性指令中背景顏色是寫死的不能更改,我們可以給指令綁定輸入屬性實現(xiàn)數(shù)據(jù)傳遞,從而達(dá)到動態(tài)改變的目的

    4.2.1 在自定義屬性指令的控制器中添加一個輸入屬性myColor

import { Directive, ElementRef, OnInit, Input } from '@angular/core';
@Directive({
 selector: '[appDirectiveTest02]'
})
export class DirectiveTest02Directive implements OnInit {
 @Input()
 myColor: string;
 constructor(
 private el: ElementRef
 ) {}
 ngOnInit() {
 this.el.nativeElement.style.backgroundColor = this.myColor;
 }
}

    4.2.2 在組件中給myColor屬性賦值

      技巧01:在給輸入屬性賦值時,等號右邊如果不是一個變量就需要用單引號括起來

<div class="panel panel-primary">
 <div class="panel panel-heading">實現(xiàn)自定義屬性指令</div>
 <div class="panel-body">
 <button md-raised-button appDirectiveTest02 [myColor]="'red'">實現(xiàn)自定義指令的按鈕</button>
 <br /><br />
 <button md-raised-button>未實現(xiàn)自定以指令的按鈕</button>
 </div>
 <div class="panel-footer">2018-1-20 22:47:06</div>
</div>

    4.2.3 效果展示

    4.2.4 改進(jìn)

      可以通過自定義屬性指令的選擇器來實現(xiàn)數(shù)據(jù)傳輸

      》利用自定義屬性指令的選擇器作為輸入屬性myColor輸入屬性的別名

      》在組件中直接利用自定義指令的選擇器作為輸入屬性

<div class="panel panel-primary">
 <div class="panel panel-heading">實現(xiàn)自定義屬性指令</div>
 <div class="panel-body">
 <button md-raised-button [appDirectiveTest02]="'yellow'">實現(xiàn)自定義指令的按鈕</button>
 <br /><br />
 <button md-raised-button>未實現(xiàn)自定以指令的按鈕</button>
 </div>
 <div class="panel-footer">2018-1-20 22:47:06</div>
</div>

      》 效果展示   

 

  4.3 響應(yīng)用戶操作

    在自定義屬性指令中通過監(jiān)聽DOM對象事件來進(jìn)行一些操作

    4.2.1 引入 HostListener 注解并編寫一個方法    

      技巧01:HostListener注解可以傳入兩個參數(shù)

        參數(shù)1 -> 需要監(jiān)聽的事件名稱

        參數(shù)2 -> 事件觸發(fā)時傳遞的方法

 @HostListener('click', ['$event'])
 onClick(ev: Event) {

  }

    4.2.2 在方法中實現(xiàn)一些操作 

@HostListener('click', ['$event'])
 onClick(ev: Event) {
 if (this.el.nativeElement === ev.target) {
 if (this.el.nativeElement.style.backgroundColor === 'green') {
 this.el.nativeElement.style.backgroundColor = 'skyblue';
 } else {
 this.el.nativeElement.style.backgroundColor = 'green';
 }
 }
 // if (this.el.nativeElement.style.backgroundColor === 'yellow') {
 // this.el.nativeElement.style.backgroundColor = 'green';
 // } else {
 // this.el.nativeElement.style.backgroundColor = 'yellow';
 // }
 }

    4.2.3 在組件中標(biāo)記自定義屬性指令的選擇器就可以啦

<div class="panel panel-primary">
 <div class="panel panel-heading">實現(xiàn)自定義屬性指令</div>
 <div class="panel-body">
 <button md-raised-button appDirectiveTest02 >實現(xiàn)自定義指令的按鈕</button>
 <br /><br />
 <button md-raised-button>未實現(xiàn)自定以指令的按鈕</button>
 </div>
 <div class="panel-footer">2018-1-20 22:47:06</div>
</div>

    4.2.4 代碼匯總

import { Directive, ElementRef, OnInit, Input, HostListener } from '@angular/core';
@Directive({
 selector: '[appDirectiveTest02]'
})
export class DirectiveTest02Directive implements OnInit {
 constructor(
 private el: ElementRef
 ) {}
 ngOnInit() {
 }
 @HostListener('click', ['$event'])
 onClick(ev: Event) {
 if (this.el.nativeElement === ev.target) {
 if (this.el.nativeElement.style.backgroundColor === 'green') {
 this.el.nativeElement.style.backgroundColor = 'skyblue';
 } else {
 this.el.nativeElement.style.backgroundColor = 'green';
 }
 }
 // if (this.el.nativeElement.style.backgroundColor === 'yellow') {
 // this.el.nativeElement.style.backgroundColor = 'green';
 // } else {
 // this.el.nativeElement.style.backgroundColor = 'yellow';
 // }
 }
}

總結(jié)

以上所述是小編給大家介紹的Angular17之Angular自定義指令詳解,希望對大家有所幫助,如果大家有任何疑問歡迎各我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • Angular js 實現(xiàn)添加用戶、修改密碼、敏感字、下拉菜單的綜合操作方法

    Angular js 實現(xiàn)添加用戶、修改密碼、敏感字、下拉菜單的綜合操作方法

    這篇文章主要介紹了Angular js 實現(xiàn)添加用戶、修改密碼、敏感字、下拉菜單的綜合操作方法,需要的朋友可以參考下
    2017-10-10
  • AngularJS實現(xiàn)在ng-Options加上index的解決方法

    AngularJS實現(xiàn)在ng-Options加上index的解決方法

    這篇文章主要介紹了AngularJS實現(xiàn)在ng-Options加上index的解決方法,結(jié)合實例形式分析了AngularJS在ngOptions添加索引的操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-11-11
  • angular寫一個列表的選擇全選交互組件的示例

    angular寫一個列表的選擇全選交互組件的示例

    本篇文章主要介紹了angular寫一個列表的選擇全選交互組件的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 利用Angular7開發(fā)一個Radio組件的全過程

    利用Angular7開發(fā)一個Radio組件的全過程

    這篇文章主要給大家介紹了關(guān)于如何利用Angular7開發(fā)一個Radio組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Angular7具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 基于AngularJS+HTML+Groovy實現(xiàn)登錄功能

    基于AngularJS+HTML+Groovy實現(xiàn)登錄功能

    AngularJS是一款客戶端MVC的javascript框架,而客戶端MVC代表未來架構(gòu)(為什么要使用MVC+REST+CQRS架構(gòu)),如果你有Struts或SpringMVC等后端MVC框架編程經(jīng)驗,學(xué)習(xí)Angular會很快,基本是按照同一個MVC思路實現(xiàn)的,本文給大家介紹AngularJS+HTML+Groovy實現(xiàn)登錄功能
    2016-02-02
  • AngularJS 簡單應(yīng)用實例

    AngularJS 簡單應(yīng)用實例

    本文主要介紹AngularJS 的簡單應(yīng)用實例,這里對AngularJS的知識總結(jié),并提供實例代碼和應(yīng)用程序講解,有需要的小伙伴可以參考下
    2016-07-07
  • 利用VS Code開發(fā)你的第一個AngularJS 2應(yīng)用程序

    利用VS Code開發(fā)你的第一個AngularJS 2應(yīng)用程序

    這篇文章主要給大家介紹了關(guān)于利用VS Code如何開發(fā)你的第一個AngularJS 2應(yīng)用程序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友下面來一起看看吧。
    2017-12-12
  • AngularJS單選框及多選框?qū)崿F(xiàn)雙向動態(tài)綁定

    AngularJS單選框及多選框?qū)崿F(xiàn)雙向動態(tài)綁定

    這篇文章主要為大家詳細(xì)介紹了AngularJS單選框及多選框?qū)崿F(xiàn)雙向動態(tài)綁定的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 將angular.js項目整合到.net mvc中的方法詳解

    將angular.js項目整合到.net mvc中的方法詳解

    這篇文章主要給大家介紹了將angular.js項目整合到.net mvc中的相關(guān)資料,文中通過示例代碼將實現(xiàn)的過程介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起看看吧。
    2017-06-06
  • angularjs基礎(chǔ)教程

    angularjs基礎(chǔ)教程

    AngularJS是為了克服HTML在構(gòu)建應(yīng)用上的不足而設(shè)計的。HTML是一門很好的為靜態(tài)文本展示設(shè)計的聲明式語言,但要構(gòu)建WEB應(yīng)用的話它就顯得乏力了。所以我做了一些工作(你也可以覺得是小花招)來讓瀏覽器做我想要的事。
    2014-12-12

最新評論

桂阳县| 方山县| 泰兴市| 合川市| 七台河市| 读书| 谢通门县| 罗江县| 广宁县| 孝义市| 米脂县| 岚皋县| 钟山县| 霍林郭勒市| 奉节县| 右玉县| 房产| 伊金霍洛旗| 乐平市| 湖北省| 宜州市| 新竹市| 临沂市| 永安市| 镇赉县| 临城县| 海原县| 中牟县| 乌兰浩特市| 定边县| 济阳县| 右玉县| 鱼台县| 永登县| 文化| 呼伦贝尔市| 武强县| 武鸣县| 山阳县| 江门市| 德安县|