Heim > Web-Frontend > js-Tutorial > Hauptteil

Eine eingehende Analyse der Klassendekoratoren in Angular

青灯夜游
Freigeben: 2021-12-20 09:04:59
nach vorne
1874 Leute haben es durchsucht

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

Eine eingehende Analyse der Klassendekoratoren in Angular

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 ist die HTML-Dateipfadadresse

2.3-Stile, styleUrls

  • styles ist der direkt geschriebene CSS-Stil
  • styleUrls ist die CSS-Dateipfadadresse

2.4-Animationen.

Ein oder mehr Animationstrigger()-Aufruf, der einige state()- und transition()-Definitionen enthält.

2.5 Anbieter

Dienste können hier registriert und genutzt werden

2.6 changeDetection

Geben Sie die Änderungserkennungsstrategie der aktuellen Komponente an.

2.7 Eingaben: string[]

von der Komponente übergebene Parameter, äquivalent zu @Input<code>@Input。和@Input不同的是它是一个数组。

@Component({
  selector: &#39;mo-dir&#39;,
  inputs: [id: 123],
  template: `
   {{ id }}
  `
})
class BankAccount {
  id: number;
}
Nach dem Login kopieren

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>();
}
Nach dem Login kopieren

相当于@output idChange: EventEmitter<string> = new EventEmitter<string>();

3. Directive

3.1 selector: string

它是一个css选择器, 用于在模板中标记出该指令,并触发该指令的实例化。可使用下列形式之一

  • 元素名或标签名
@Directive({
  selector: &#39;mo&#39;,
})
Nach dem Login kopieren
<mo></mo>
Nach dem Login kopieren
  • class
@Directive({
  selector: &#39;.mo&#39;,
})
Nach dem Login kopieren
<div class=".mo"></div>
Nach dem Login kopieren
  • 属性名
@Directive({
  selector: &#39;[mo]&#39;,
})
Nach dem Login kopieren
<div mo></div>
Nach dem Login kopieren
  • 属性名=属性值
@Directive({
  selector: &#39;[type=text]&#39;,
})
Nach dem Login kopieren
<input type="text"></div>
Nach dem Login kopieren
  • 不包含某个选择器

比如匹配有属性mo但是不包含class.foo

@Directive({
  selector: &#39;div[mo]:not(.foo)&#39;,
})
Nach dem Login kopieren
<div mo></div>
Nach dem Login kopieren

上述指令第一个不会被匹配到,第二个会被匹配到。

  • 匹配多个中的一个即可

可以同时写多个,如果匹配到其中一个即可,使用逗号隔开。

@Directive({
  selector: &#39;.foo, .bar&#39;,
})
Nach dem Login kopieren
<div class="foo"></div>
<div class="bar></div>
<div class="foo bar"></div>
Nach dem Login kopieren

上述三个均会被添加上指令。

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() {
        // 修改颜色的逻辑
    }
}
Nach dem Login kopieren
<p changeColor #changeColorRef="changeColor"></p>

<button (click)="changeColorRef.toggleColor()"></button>
Nach dem Login kopieren

指令通过属性[changeColor]获取到了p元素,之后通过exportAs把指令以changeColor变量抛了出去, 在html模板中以#changeColorRef. Der Unterschied zu @Input

besteht darin, dass es sich um ein Array handelt. Der Inhalt in

@Injectable({
  providedIn: &#39;root&#39;,
})
Nach dem Login kopieren
inputs zeigt an, dass es ein ID-Attribut gibt und der Standardwert 123 ist. Entspricht @Eingabe-ID: Zahl = 123.

2.8 Ausgaben: string[]

  • Ereignisausgabe, entspricht @Output
  • , der Unterschied zu @Output
  • besteht darin, dass es sich um ein Array handelt .
  • 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出去
      }
    }
    Nach dem Login kopieren
  • entspricht @output idChange: EventEmitter<string> = new EventEmitter<string>();
  • .

3. Direktive

3.1 Selektor: string

Es handelt sich um einen CSS-Selektor, der in Vorlagen verwendet wird. Markieren Sie die Direktive in und löst die Instanziierung der Direktive aus. Sie können eine der folgenden Formen verwenden

Elementname oder Tag-Name
  • @Component({
      selector: &#39;mo-dir&#39;,
      template: `
        <p>   {{ name | mo: id }} </span>
      `
    })
    class BankAccount {
        name: string = "deepthan"
        id:   number = 1;
    }
    Nach dem Login kopieren
    rrreee
  • Klasse
  • rrreeerrreee
  • Attributname

    rrreeerrreee

    Attributname = Attribut. Wert

    rrree errreee

    Enthält kein Auswahlgerät

    Wenn beispielsweise das Attribut mo

    übereinstimmt, aber class.foo nicht enthält<h4 data-id="heading-28"> <strong>rrreeerrreee</strong>Die erste der oben genannten Anweisungen wird nicht abgeglichen, die zweite jedoch. </h4> <ul> <li>Passen Sie einfach eine der mehreren an.</li> <li>Sie können mehrere gleichzeitig schreiben. Wenn eine davon übereinstimmt, trennen Sie sie durch Kommas. </ul>rrreeerrreee<p>Zu allen drei oben genannten werden Befehle hinzugefügt. </p> <h4 data-id="heading-21"></h4> <p>3.2 Eingaben, Ausgaben: string[]</p> <blockquote> <p>Gleiche Komponente</p> <h4 data-id="heading-22"></h4> <p>3.3 Anbieter</p> </blockquote> <p>Inject-Dienste im Einsatz <a href="//m.sbmmt.com/course.html" target="_blank" textvalue="编程视频"><h4 data-id="heading-23"></h4></a>3.4 exportAs: string</p>🎜🎜🎜Nutzen Sie die exportAs-Eigenschaft in Angular: 🎜🎜https://netbasal.com/angular-2-take-advantage- of -the-exportas-property-81374ce24d26🎜🎜🎜 Wirft die Anweisung in eine Variable zur externen Verwendung ein. 🎜🎜Schreiben Sie beispielsweise eine Anweisung zum Ändern der Textfarbe🎜rrreeerrreee🎜Die Anweisung erhält das p-Element über das Attribut <code>[changeColor]🎜 und gibt die Anweisung dann über <code> als Variable <code>changeColor🎜 aus exportAs🎜, in Die HTML-Vorlage verwendet <code>#changeColorRef🎜, um die Anweisungsinstanz zu empfangen. Zu diesem Zeitpunkt kann der Inhalt dieser Anweisung verwendet werden. 🎜🎜🎜3.5 Abfragen, Host, JIT🎜🎜🎜Die offizielle Website erklärt es sehr deutlich: 🎜🎜🎜Abfragen: 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🎜🎜rrreee🎜🎜'root': Injektor auf Anwendungsebene in den meisten Anwendungen. 🎜🎜 'Plattform': Spezieller Singleton-Plattform-Injektor, der von allen Anwendungen auf der Seite gemeinsam genutzt wird. 🎜🎜'any': Stellen Sie in jedem Modul (einschließlich Lazy-Modulen) eine eindeutige Instanz bereit, die das Token einfügt. 🎜🎜🎜🎜5. Pipe🎜🎜🎜Die Funktion der Pipe ist die Datenkonvertierung. 5.1 Name: Zeichenfolge time Es wird einmal während des Änderungserkennungszyklus aufgerufen – auch wenn sich seine Parameter nicht geändert haben. 🎜🎜🎜Passen Sie eine Pipeline an: 🎜🎜Übergeben Sie den Namen und die ID zur Verarbeitung an die Pipeline🎜rrreeerrreee🎜🎜Weitere Nutzungsaktualisierungen auf Github:🎜🎜https://github.com/deepthan/blog-angular🎜🎜🎜Mehr Für mehr Programmierkenntnisse finden Sie unter: 🎜Programmiervideos🎜! ! 🎜

    Das obige ist der detaillierte Inhalt vonEine eingehende Analyse der Klassendekoratoren in Angular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!