目錄
1. NgModule
1.1 imports
1.2.  declarations: Array<Type | any[]>
3.3 providers
1.4 exports: Array<Type | any[]>
1.5 entryComponents: []
1.6 bootstrap:Array<Type | any[]>
1.7 schemas: Array<SchemaMetadata | any[]>
1.8 id: string
1.9 jit: true
2. Component
3.1 selector: string
2.2 template: string、templateUrl:string
2.3 styles、styleUrls
2.4 animations
2.6 changeDetection
2.7 inputs: string[]
2.8 outputs:string[]
3. Directive
3.2 inputs、outputs: string[]
3.4 exportAs: string
3.5 queries、host、jit
4. Injectable
5. pipe
5.1 name: string
5.2 pure: boolean
首頁 web前端 js教程 深入淺析Angular中的類別(class)裝飾器

深入淺析Angular中的類別(class)裝飾器

Nov 11, 2021 am 10:13 AM
angular 類別裝飾器

本篇文章带大家了解一下Angular中的5种类(class)装饰器,希望对大家有所帮助!

深入淺析Angular中的類別(class)裝飾器

angular共有5种类装饰器,表明每个类的用途,angular用何种方式解析它。

  • NgModule: 标明是一个模块
  • Component:标明是一个组件
  • Directive: 标明是一个指令
  • Injectable: 标明是一个服务
  • Pipe: 标明是一个管道

1. NgModule

把一个类标记为模块,并可以在这个类中配置这个模块中用到的数据。【相关教程推荐:《angular教程》】

它支持做如下配置:(下同)

1.1 imports

导入本模块需要用到的模块,注意懒加载的模块不能导入,否则懒加载就没有作用了。

1.2.  declarations: Array

声明组件、指令、管道,这三个统称为可申明对象。

1.3. providers: []

注册服务

1.4 exports: Array

其他模块若想使用本模块的组件、指令或管道,则需要将其抛出去。

为啥要抛出去?angular规定可声明对象应该且只能属于一个 NgModule。

1.5 entryComponents: []

告诉 Angular 哪些是动态组件,Angular 都会为其创建一个 ComponentFactory,并将其保存到 ComponentFactoryResolver 中。

若要写一个动态组件不仅要在这里加,还需要在declarations中申明。

1.6 bootstrap:Array

当该模块引导时需要进行引导的组件。列在这里的所有组件都会自动添加到 entryComponents 中。即路由链接到该模块时默认显示的组件。

1.7 schemas: Array

该 NgModule 中允许使用的声明元素的 schema(HTML 架构)。 元素和属性(无论是 Angular 组件还是指令)都必须声明在 schema 中。

1.8 id: string

当前 NgModule 在 getModuleFactory 中的名字或唯一标识符。 如果为 undefined,则该模块不会被注册进 getModuleFactory 中。

1.9 jit: true

如果为 true,则该模块将会被 AOT 编译器忽略,因此始终会使用 JIT 编译。

2. Component

一个装饰器,用于把某个类标记为 Angular 组件,并为它配置一些元数据,以决定该组件在运行期间该如何处理、实例化和使用。 组件是特殊的指令,它的一部分属性继承自 Directive 装饰器。

2.1 selector: string

css选择器名称, 可以是标签名、属性、class等,一般都是以标签来命名,具体见指令选择器部分。

selector: 'mo-dir'在html中使用为 <mo-dir></mo-dir>
也可以使用属性来定义, 如selector: '[mo-dir]'在html中使用为 <div mo-dir></div>

2.2 template: string、templateUrl:string

这两个同时只能用1个

  • template 是直接写的html字符串,如<div>我是html内容</div>
  • templateUrl 是html檔案路徑位址

2.3 styles、styleUrls

  • styles 是直接寫的css樣式
  • styleUrls 是css檔案路徑位址

2.4 animations

一個或多個動畫trigger() 調用,包含一些state( ) 和transition() 定義。

2.5 providers

服務可以在這裡面註冊就可以使用了

2.6 changeDetection

#指定目前組件的變更偵測策略。

2.7 inputs: string[]

元件傳入的參數,相當於@Input。和@Input不同的是它是一個陣列。

@Component({
  selector: &#39;mo-dir&#39;,
  inputs: [id: 123],
  template: `
   {{ id }}
  `
})
class BankAccount {
  id: number;
}
登入後複製

inputs中的內容表示有個id屬性,預設值是123。相當於@Input id: number = 123

2.8 outputs:string[]

事件輸出,相當於@Output,和@Output不同的是它是一個陣列。

@Component({
  selector: &#39;mo-dir&#39;,
  outputs: [ &#39;idChange&#39; ]
})
class ChildDir {
 idChange: EventEmitter<string> = new EventEmitter<string>();
}
登入後複製

相當於@output idChange: EventEmitter<string> = new EventEmitter<string>();

3. Directive

3.1 selector: string

它是一個css選擇器, 用來在範本中標記出該指令,並觸發該指令的實例化。可使用下列形式之一

  • 元素名稱或標籤名稱
@Directive({
  selector: &#39;mo&#39;,
})
登入後複製
<mo></mo>
登入後複製
  • class
@Directive({
  selector: &#39;.mo&#39;,
})
登入後複製
<div class=".mo"></div>
登入後複製
  • 屬性名稱
@Directive({
  selector: &#39;[mo]&#39;,
})
登入後複製
<div mo></div>
登入後複製
  • 屬性名稱=屬性值
@Directive({
  selector: &#39;[type=text]&#39;,
})
登入後複製
<input type="text"></div>
登入後複製
  • 不包含某個選擇器

例如符合有屬性mo但是不包含class.foo

@Directive({
  selector: &#39;div[mo]:not(.foo)&#39;,
})
登入後複製
<div mo></div>
登入後複製

上述指令第一個不會被比對到,第二個會被比對到。

  • 符合多個中的一個即可

可以同時寫多個,如果配對到其中一個即可,使用逗號隔開。

@Directive({
  selector: &#39;.foo, .bar&#39;,
})
登入後複製
<div class="foo"></div>
<div class="bar></div>
<div class="foo bar"></div>
登入後複製

上述三個都會被加入指令。

3.2 inputs、outputs: string[]

#相同元件

3.3 providers

#將服務注入進來使用

3.4 exportAs: string

Take Advantage of the exportAs Property in Angular:

https://netbasal.com /angular-2-take-advantage-of-the-exportas-property-81374ce24d26

把指令以一個變數拋出去,供外部使用。

例如寫了一個指令來修改文字顏色

@Directive({
 selector: &#39;[changeColor]&#39;,
 exportAs: &#39;changeColor&#39;
})
class ChangeColorDirective {
    
    toggleColor() {
        // 修改颜色的逻辑
    }
}
登入後複製
<p changeColor #changeColorRef="changeColor"></p>

<button (click)="changeColorRef.toggleColor()"></button>
登入後複製

指令透過屬性[changeColor]取得到了p元素,之後透過exportAs把指令以changeColor變數拋了出去, 在html模板中以#changeColorRef接收指令實例,這時就可以用這個指令裡的內容了。

3.5 queries、host、jit

官網講得挺清楚:

  • queries:https://angular.cn/api /core/Directive#queries
  • host:https://angular.cn/api/core/Directive#host
  • jit:https://angular.cn/api/core/Directive #jit

4. Injectable

#Injectable:

https://angular.cn/api/core/Injectable

@Injectable({
  providedIn: &#39;root&#39;,
})
登入後複製
  • 'root':大多數應用程式中的應用程式層級注入器。
  • '平台':頁面上所有應用程式共享的特殊單例平台注入器。
  • 'any':在每個注入令牌的模組(包括惰性模組)中提供唯一的實例。

5. pipe

管道的作用是資料轉換。

5.1 name: string

管道名稱

5.2 pure: boolean

  • true : 純管道,transform方法只有在輸入參數變化時參數會被呼叫
  • false: 該管道會在每個變更偵測週期中都被呼叫一次- 即使其參數沒有發生任何變化。

自訂一個管道:

把名字和id傳入到管道進行處理

import { Pipe, PipeTransform } from &#39;@angular/core&#39;;

@Pipe({
  name: &#39;mo&#39;,
})
export class MoPipe implements PipeTransform {
  transform(name: string, id: number): any {
    // 对传进来的数组进行处理,再return出去
  }
}
登入後複製
@Component({
  selector: &#39;mo-dir&#39;,
  template: `
    <p>   {{ name | mo: id }} </span>
  `
})
class BankAccount {
    name: string = "deepthan"
    id:   number = 1;
}
登入後複製

更多用法更新於 github:

https://github.com/deepthan/blog-angular

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

以上是深入淺析Angular中的類別(class)裝飾器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
聊聊Angular中的元資料(Metadata)和裝飾器(Decorator) 聊聊Angular中的元資料(Metadata)和裝飾器(Decorator) Feb 28, 2022 am 11:10 AM

這篇文章繼續Angular的學習,帶大家了解Angular中的元數據和裝飾器,簡單了解一下他們的用法,希望對大家有幫助!

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

淺析angular中怎麼使用monaco-editor 淺析angular中怎麼使用monaco-editor Oct 17, 2022 pm 08:04 PM

angular中怎麼使用monaco-editor?以下這篇文章記錄下最近的一次業務中用到的 m​​onaco-editor 在 angular 中的使用,希望對大家有幫助!

一文探究Angular中的服務端渲染(SSR) 一文探究Angular中的服務端渲染(SSR) Dec 27, 2022 pm 07:24 PM

你知道 Angular Universal 嗎?可以幫助網站提供更好的 SEO 支援哦!

Angular + NG-ZORRO快速開發一個後台系統 Angular + NG-ZORRO快速開發一個後台系統 Apr 21, 2022 am 10:45 AM

這篇文章跟大家分享一個Angular實戰,了解一下angualr 結合 ng-zorro 如何快速開發一個後台系統,希望對大家有幫助!

如何使用PHP和Angular進行前端開發 如何使用PHP和Angular進行前端開發 May 11, 2023 pm 04:04 PM

隨著網路的快速發展,前端開發技術也不斷改進與迭代。 PHP和Angular是兩種廣泛應用於前端開發的技術。 PHP是一種伺服器端腳本語言,可以處理表單、產生動態頁面和管理存取權限等任務。而Angular是一種JavaScript的框架,可以用來開發單一頁面應用程式和建構元件化的網頁應用程式。本篇文章將介紹如何使用PHP和Angular進行前端開發,以及如何將它們

angular學習之詳解狀態管理器NgRx angular學習之詳解狀態管理器NgRx May 25, 2022 am 11:01 AM

這篇文章帶大家深入了解angular的狀態管理器NgRx,介紹一下NgRx的使用方法,希望對大家有幫助!

使用Angular和Node進行基於令牌的身份驗證 使用Angular和Node進行基於令牌的身份驗證 Sep 01, 2023 pm 02:01 PM

身份驗證是任何網路應用程式中最重要的部分之一。本教程討論基於令牌的身份驗證系統以及它們與傳統登入系統的差異。在本教程結束時,您將看到一個用Angular和Node.js編寫的完整工作演示。傳統身份驗證系統在繼續基於令牌的身份驗證系統之前,讓我們先來看看傳統的身份驗證系統。使用者在登入表單中提供使用者名稱和密碼,然後點擊登入。發出請求後,透過查詢資料庫在後端驗證使用者。如果請求有效,則使用從資料庫中獲取的使用者資訊建立會話,然後在回應頭中傳回會話訊息,以便將會話ID儲存在瀏覽器中。提供用於存取應用程式中受

See all articles