ホームページ >ウェブフロントエンド >jsチュートリアル >Angular コンポーネントのソースコード例の分析
この記事では主に Angular コンポーネントを解析するソースコードの例を紹介しますので、参考にしてください。
Webコンポーネント
Angularコンポーネントを紹介する前に、W3C Webコンポーネントについて簡単に理解しましょう
定義
W3Cは、統一コンポーネントの標準方式であり、Webコンポーネントの標準を提案しています。
各コンポーネントには独自の html、css、js コードが含まれています。
Web コンポーネント標準には、次の 4 つの重要な概念が含まれています。
1.カスタム要素 (カスタム タグ): カスタム HTML タグと要素を作成できます。
2.HTML テンプレート (HTML テンプレート): d477f9ce7bf77f53fbcf36bec1b69b7a タグを使用して、いくつかのコンテンツを定義します。ただし、それをページにロードするのではなく、JS コードを使用して初期化します。
3. 他の要素から完全に独立した DOM サブツリーを作成できます。 (HTML インポート): HTML ドキュメントに他の HTML ドキュメントを導入する方法、01a3a061c487227e31d0b850a8271aa1。
例
hello-componentを定義する<template id="hello-template"> <style> h1 { color: red; } </style> <h1>Hello Web Component!</h1> </template> <script> // 指向导入文档,即本例的index.html var indexDoc = document; // 指向被导入文档,即当前文档hello.html var helloDoc = (indexDoc._currentScript || indexDoc.currentScript).ownerDocument; // 获得上面的模板 var tmpl = helloDoc.querySelector('#hello-template'); // 创建一个新元素的原型,继承自HTMLElement var HelloProto = Object.create(HTMLElement.prototype); // 设置 Shadow DOM 并将模板的内容克隆进去 HelloProto.createdCallback = function() { var root = this.createShadowRoot(); root.appendChild(indexDoc.importNode(tmpl.content, true)); }; // 注册新元素 var hello = indexDoc.registerElement('hello-component', { prototype: HelloProto }); </script>hello-componentを使用する
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-COMPATIBLE" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="author" content="赖祥燃, laixiangran@163.com, http://www.laixiangran.cn"/> <title>Web Component</title> <!--导入自定义组件--> <link rel="import" href="hello.html" rel="external nofollow" > </head> <body> <!--自定义标签--> <hello-component></hello-component> </body> </html>上記のコードからわかるように、hello.htmlは標準で定義されているコンポーネント(名前はhello- コンポーネント)、このコンポーネントは独自の構造、スタイル、ロジックを持ち、index.html にコンポーネント ファイルを導入し、通常のタグと同様に使用できます。
Angular コンポーネント
Angular コンポーネントはディレクティブの一種であり、テンプレートを備えたディレクティブとして理解できます。他の 2 つのタイプは、属性ディレクティブと構造ディレクティブです。 基本的な構成@Component({ selector: 'demo-component', template: 'Demo Component' }) export class DemoComponent {}
タイプ | 機能 | |
---|---|---|
コンポーネントのアニメーションを設定します | changeDetection | |
コンポーネントの変更検出戦略を設定します | encapsulation | |
コンポーネントのビューパッケージ化オプションを設定します | entryComponents | |
設定はコンポーネントビューに動的に挿入されますコンポーネントリスト | interpolation | |
カスタムコンポーネントの補間マーク、デフォルトは二重中括弧です | moduleId | |
ES配下にこのコンポーネントのモジュールを設定します/CommonJS 仕様 ID。テンプレート スタイルの相対パスを解決するために使用されます | styleUrls | |
コンポーネントによって参照される外部スタイル ファイルを設定します | styles | |
Setコンポーネントによって使用されるインライン スタイル | template | |
コンポーネントのインライン テンプレートを設定します | templateUrl | |
コンポーネント テンプレートが配置されているパスを設定します | viewProviders | |
コンポーネントとそのすべてのサブコンポーネントを設定します (ContentChildren を除く) 利用可能なサービス |
Function | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
テンプレートにコンポーネント インスタンスを設定します。 のエイリアスを使用すると、 | host | |||||||||||||||||||
を呼び出して、コンポーネントのイベント、アクション、プロパティを設定できます | inputs | |||||||||||||||||||
settings コンポーネントの入力プロパティ | outputs | |||||||||||||||||||
コンポーネントの出力プロパティを設定 | providers | |||||||||||||||||||
を設定しますコンポーネントとそのすべてのサブコンポーネント (ContentChildren を含む) で利用可能なサービス (依存関係の注入) ) | queries | |||||||||||||||||||
コンポーネントに注入する必要があるクエリを設定します | selector | |||||||||||||||||||
テンプレート内でこのコンポーネントを識別するために使用されるCSSセレクターを設定します(コンポーネントのカスタムタグ) |
生命周期钩子 | 调用时机 |
---|---|
ngOnChanges | 在ngOnInit之前调用,或者当组件输入数据(通过@Input装饰器显式指定的那些变量)变化时调用。 |
ngOnInit | 第一次ngOnChanges之后调用。建议此时获取数据,不要在构造函数中获取。 |
ngDoCheck | 每次变化监测发生时被调用。 |
ngAfterContentInit | 使用 |
ngAfterContentChecked | ngAfterContentInit后被调用,或者每次变化监测发生时被调用(只适用组件)。 |
ngAfterViewInit | 创建了组件的视图及其子视图之后被调用(只适用组件)。 |
ngAfterViewChecked | ngAfterViewInit,或者每次子组件变化监测时被调用(只适用组件)。 |
ngOnDestroy | 销毁指令/组件之前触发。此时应将不会被垃圾回收器自动回收的资源(比如已订阅的观察者事件、绑定过的DOM事件、通过setTimeout或setInterval设置过的计时器等等)手动销毁掉。 |
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
以上がAngular コンポーネントのソースコード例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。