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

Angular 4 指令快速入門教程

 更新時(shí)間:2017年06月07日 09:52:19   作者:semlinker  
本篇文章主要介紹了Angular 4 指令快速入門教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本系列教程的開發(fā)環(huán)境及開發(fā)語言:

  1. Angular 4 +
  2. Angular CLI
  3. TypeScript

基礎(chǔ)知識(shí)

Angular CLI 基本使用

安裝 Angular CLI (可選)

npm install -g @angular/cli

創(chuàng)建新的項(xiàng)目

ng new PROJECT-NAME

啟動(dòng)本地服務(wù)器

cd PROJECT-NAME
ng serve

Angular 指令簡(jiǎn)介

Angular 的指令分為三種:

  1. 組件(Component directive):用于構(gòu)建UI組件,繼承于 Directive 類
  2. 屬性指令(Attribute directive):用于改變組件的外觀或行為
  3. 結(jié)構(gòu)指令(Structural directive):用于動(dòng)態(tài)添加或刪除 DOM 元素來改變 DOM 布局

Angular 指令分類圖

Angular 組件組成圖

第一節(jié) - 創(chuàng)建指令

在 Angular 中,我們可以使用 HostBinding 裝飾器,實(shí)現(xiàn)元素的屬性綁定。

指令的作用

該指令用于演示如何利用 HostBinding 裝飾器,設(shè)置元素的 innerText 屬性。

指令的實(shí)現(xiàn)

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

@Directive({
  selector: '[greet]'
})
export class GreetDirective {
 @HostBinding() innerText = 'Hello, Everyone!';
}
指令的應(yīng)用
import { Component } from '@angular/core';

@Component({
 selector: 'app-root',
 template: `
  <h2>Hello, Angular</h2>
  <h2 greet>Hello, Angular</h2>
 `,
})
export class AppComponent { }

第二節(jié) - 定義輸入屬性

為了能夠讓用戶自定義 GreetDirective 指令的問候內(nèi)容,我們需要使用 Input 裝飾器去定義指令的輸入屬性。

指令的作用

該指令用于演示如何利用 Input 裝飾器,定義指令的輸入屬性,從而實(shí)現(xiàn)讓用戶自定義問候內(nèi)容。

指令的實(shí)現(xiàn)

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

@Directive({
  selector: '[greet]'
})
export class GreetDirective {
  @Input() greet: string;
  @HostBinding() get innerText() {
    return this.greet;
  }
}

指令的應(yīng)用

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

@Component({
 selector: 'app-root',
 template: `
  <h2>Hello, Angular</h2>
  <h2 [greet]="'Hello, Semlinker!'">Hello, Angular</h2>
 `,
})
export class AppComponent { }

第三節(jié) - 事件處理

在 Angular 中,我們可以使用 HostListener 屬性裝飾器,實(shí)現(xiàn)元素的事件綁定。

指令的作用

該指令用于演示如何利用 HostListener 裝飾器,監(jiān)聽用戶的點(diǎn)擊事件。

指令的實(shí)現(xiàn)

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

@Directive({
  selector: '[greet]'
})
export class GreetDirective {
  @Input() greet: string;

  @HostBinding() get innerText() {
   return this.greet;
  }

  @HostListener('click',['$event']) 
  onClick(event) {
   this.greet = 'Clicked!';
  }
}

指令的應(yīng)用

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

@Component({
 selector: 'app-root',
 template: `
  <h2>Hello, Angular</h2>
  <h2 [greet]="'Hello, Semlinker!'">Hello, Angular</h2>
 `,
})
export class AppComponent { }

第四節(jié) - 獲取宿主元素屬性值

在 Angular 中,我們可以通過 Attribute 裝飾器來獲取指令宿主元素的屬性值。

指令的作用

該指令用于演示如何利用 Attribute 裝飾器,獲取指令宿主元素上的自定義屬性 author 的值。

指令的實(shí)現(xiàn)

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

@Directive({
  selector: '[greet]'
})
export class GreetDirective {
  @Input() greet: string;

  @HostBinding() get innerText() {
    return this.greet;
  }

  @HostListener('click',['$event']) 
  onClick(event) {
    this.greet = 'Clicked!';
    console.dir(event);
  }

  constructor(@Attribute('author') public author: string) {
    console.log(author);
  }
}

指令的應(yīng)用

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

@Component({
 selector: 'app-root',
 template: `
  <h2>Hello, Angular</h2>
  <h2 [greet]="'Hello, Semlinker!'" 
   author="semlinker">Hello, Angular</h2>
 `,
})
export class AppComponent { }

第五節(jié) - 使用 <ng-template> 元素

在 Angular 中,我們可以通過 ViewChild 裝飾器來獲取視圖中定義的模板元素,然后利用 ViewContainerRef 對(duì)象的 createEmbeddedView() 方法,創(chuàng)建內(nèi)嵌視圖。

import { Component, TemplateRef, ViewContainerRef, ViewChild, 
 AfterViewInit } from '@angular/core';

@Component({
 selector: 'app-root',
 template: `
  <ng-template #tpl>
   Hello, Semlinker!
  </ng-template>
 `,
})
export class AppComponent implements AfterViewInit{
 @ViewChild('tpl')
 tplRef: TemplateRef<any>;

 constructor(private vcRef: ViewContainerRef) {}

 ngAfterViewInit() {
  this.vcRef.createEmbeddedView(this.tplRef);
 }
}

第六節(jié) - 使用 ngTemplateOutlet 指令

ngTemplateOutlet 的作用

該指令用于基于已有的 TemplateRef 對(duì)象,插入對(duì)應(yīng)的內(nèi)嵌視圖。在應(yīng)用 NgTemplateOutlet 指令時(shí),我們可以通過 [ngTemplateOutletContext] 屬性來設(shè)置 EmbeddedViewRef 的上下文對(duì)象。綁定的上下文應(yīng)該是一個(gè)對(duì)象,此外可通過 let語法來聲明綁定上下文對(duì)象屬性名。

ngTemplateOutlet 的使用

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

@Component({
 selector: 'app-root',
 template: `
  <ng-template #stpl>
   Hello, Semlinker!
  </ng-template>
  <ng-template #atpl>
   Hello, Angular!
  </ng-template>
  <div [ngTemplateOutlet]="atpl"></div>
  <div [ngTemplateOutlet]="stpl"></div>
 `,
})
export class AppComponent { }

ngOutletContext 的使用

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

@Component({
 selector: 'app-root',
 template: `
  <ng-template #stpl let-message="message">
   <p>{{message}}</p>
  </ng-template>
  <ng-template #atpl let-msg="message">
   <p>{{msg}}</p>
  </ng-template>
  <ng-template #otpl let-msg>
   <p>{{msg}}</p>
  </ng-template>
  <div [ngTemplateOutlet]="atpl"
   [ngOutletContext]="context">
  </div>
  <div [ngTemplateOutlet]="stpl"
   [ngOutletContext]="context">
  </div>
  <div [ngTemplateOutlet]="otpl"
   [ngOutletContext]="context">
  </div>
 `,
})
export class AppComponent {
 context = { message: 'Hello ngOutletContext!', 
  $implicit: 'Hello, Semlinker!' };
}

第七節(jié) - 創(chuàng)建結(jié)構(gòu)指令

指令的功能

該指令實(shí)現(xiàn) ngIf 指令相反的效果,當(dāng)指令的輸入條件為 Falsy 值時(shí),顯示DOM元素。

指令的實(shí)現(xiàn)

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

@Directive({
  selector: '[exeUnless]'
})
export class UnlessDirective {

  @Input('exeUnless')
  set condition(newCondition: boolean) {
    if (!newCondition) { 
      this.viewContainer.createEmbeddedView(this.templateRef);
    } else {
      this.viewContainer.clear();
    }
  }

  constructor(private templateRef: TemplateRef<any>,
    private viewContainer: ViewContainerRef) {
  }
}

指令的應(yīng)用

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

@Component({
 selector: 'app-root',
 template: `
  <h2 *exeUnless="condition">Hello, Semlinker!</h2> 
 `,
})
export class AppComponent {
 condition: boolean = false;
}

我有話說

Angular 中指令與組件有什么關(guān)系?

組件繼承于指令,并擴(kuò)展了與 UI 視圖相關(guān)的屬性,如 template、styles、animations、encapsulation 等。

結(jié)構(gòu)指令中的 TemplateRef 與 ViewContainerRef 有什么作用?

TemplateRef:用于表示內(nèi)嵌的 template 模板元素,通過 TemplateRef 實(shí)例,我們可以方便創(chuàng)建內(nèi)嵌視圖(Embedded Views),且可以輕松地訪問到通過 ElementRef 封裝后的 nativeElement。需要注意的是組件視圖中的 template 模板元素,經(jīng)過渲染后會(huì)被替換成 comment 元素。

ViewContainerRef:用于表示一個(gè)視圖容器,可添加一個(gè)或多個(gè)視圖。通ViewContainerRef 實(shí)例,我們可以基于 TemplateRef 實(shí)例創(chuàng)建內(nèi)嵌視圖,并能指定內(nèi)嵌視圖的插入位置,也可以方便對(duì)視圖容器中已有的視圖進(jìn)行管理。簡(jiǎn)而言之,ViewContainerRef 的主要作用是創(chuàng)建和管理內(nèi)嵌視圖或組件視圖。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談angular.copy() 深拷貝

    淺談angular.copy() 深拷貝

    本篇文章主要介紹了淺談angular.copy() 深拷貝,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • AngularJs  Using $location詳解及示例代碼

    AngularJs Using $location詳解及示例代碼

    本文主要介紹AngularJs Using $location的知識(shí)資料,這里整理了相關(guān)的資料,及簡(jiǎn)單示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • Angular 7工作方式事件綁定

    Angular 7工作方式事件綁定

    在本章中將討論事件綁定在Angular7中的工作方式,當(dāng)用戶以鍵盤移動(dòng),鼠標(biāo)單擊或鼠標(biāo)懸停的形式與應(yīng)用程序交互時(shí),它將生成一個(gè)事件,需要處理這些事件以執(zhí)行某種操作,考慮一個(gè)示例以更好地理解這一點(diǎn)
    2023-12-12
  • AngularJS中$injector、$rootScope和$scope的概念和關(guān)聯(lián)關(guān)系深入分析

    AngularJS中$injector、$rootScope和$scope的概念和關(guān)聯(lián)關(guān)系深入分析

    這篇文章主要介紹了AngularJS中$injector、$rootScope和$scope的概念和關(guān)聯(lián)關(guān)系,結(jié)合實(shí)例形式較為深入的分析了$injector、$rootScope和$scope的概念、功能、使用方法及相互之間的關(guān)系,需要的朋友可以參考下
    2017-01-01
  • Angular學(xué)習(xí)筆記之a(chǎn)ngular的$filter服務(wù)淺析

    Angular學(xué)習(xí)筆記之a(chǎn)ngular的$filter服務(wù)淺析

    本文是小編記錄的angular學(xué)習(xí)筆記,通過本文首先給大家介紹了$filter服務(wù),然后介紹下內(nèi)置filter及filter的簡(jiǎn)單使用,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • 詳解Angular 4.x NgTemplateOutlet

    詳解Angular 4.x NgTemplateOutlet

    這篇文章主要介紹了詳解Angular 4.x NgTemplateOutlet,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 在Angular中如何監(jiān)聽某個(gè)值的變化

    在Angular中如何監(jiān)聽某個(gè)值的變化

    這篇文章主要介紹了在Angular中如何監(jiān)聽某個(gè)值的變化問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Angular2平滑升級(jí)到Angular4的步驟詳解

    Angular2平滑升級(jí)到Angular4的步驟詳解

    最近Angular項(xiàng)目組終于發(fā)布了新版——正式版 Angular 4.0.0。所以想著就來嘗試下升級(jí),記錄下整個(gè)升級(jí)過程分享給大家,所以這篇文章主要介紹了Angular2升級(jí)到Angular4的詳細(xì)步驟,需要的朋友可以參考下。
    2017-03-03
  • angularjs創(chuàng)建彈出框?qū)崿F(xiàn)拖動(dòng)效果

    angularjs創(chuàng)建彈出框?qū)崿F(xiàn)拖動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了angularjs創(chuàng)建彈出框?qū)崿F(xiàn)拖動(dòng)效果的相關(guān)資料,angularjs modal模態(tài)框創(chuàng)建可拖動(dòng)的指令,感興趣的小伙伴們可以參考一下
    2016-01-01
  • AngularJS基礎(chǔ) ng-init 指令簡(jiǎn)單示例

    AngularJS基礎(chǔ) ng-init 指令簡(jiǎn)單示例

    本文主要介紹AngularJS ng-init 指令,這里幫大家整理了關(guān)于ng-init 指令的基本知識(shí)資料,并附有簡(jiǎn)單的代碼示例,有需要學(xué)習(xí)的小伙伴可以參考下
    2016-08-08

最新評(píng)論

海盐县| 清流县| 易门县| 潍坊市| 孝义市| 大埔县| 盐源县| 共和县| 伊通| 盐城市| 资溪县| 菏泽市| 新田县| 乐东| 惠州市| 徐闻县| 晋江市| 松原市| 西城区| 渭南市| 灵川县| 调兵山市| 永平县| 望都县| 保定市| 六枝特区| 萨迦县| 定陶县| 汉沽区| 綦江县| 靖宇县| 留坝县| 奉新县| 元朗区| 新昌县| 文山县| 台江县| 当雄县| 启东市| 汤阴县| 香格里拉县|