国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

angular組件繼承的實現(xiàn)方法第1/2頁

2024-05-06 15:21:27
字體:
供稿:網(wǎng)友

Angular 2.3 版本中引入了組件繼承的功能,該功能非常強大,能夠大大增加我們組件的可復(fù)用性。

組件繼承涉及以下的內(nèi)容:

Metadata:如 @Input()、@Output()、@ContentChild/Children、@ViewChild/Children 等。在派生類中定義的元數(shù)據(jù)將覆蓋繼承鏈中的任何先前的元數(shù)據(jù),否則將使用基類元數(shù)據(jù)。

Constructor:如果派生類未聲明構(gòu)造函數(shù),它將使用基類的構(gòu)造函數(shù)。這意味著在基類構(gòu)造函數(shù)注入的所有服務(wù),子組件都能訪問到。

Lifecycle hooks:如果基類中包含生命周期鉤子,如 ngOnInit、ngOnChanges 等。盡管在派生類沒有定義相應(yīng)的生命周期鉤子,基類的生命周期鉤子會被自動調(diào)用。

需要注意的是,模板是不能被繼承的 ,因此共享的 DOM 結(jié)構(gòu)或行為需要單獨處理。了解詳細信息,請查看 - properly support inheritance。

接下來我們來快速體驗的組件繼承的功能并驗證以上的結(jié)論,具體示例如下(本文所有示例基于的 Angular 版本是 - 4.0.1):

exe-base.component.ts

import { Component, ElementRef, Input, HostBinding, HostListener, OnInit } from '@angular/core'; @Component({  selector: 'exe-base', // template will not be inherited template: `  <div>    exe-base:我是base組件么? - {{isBase}}  </div> ` }) export class BaseComponent implements OnInit { @Input() isBase: boolean = true; @HostBinding('style.color') color = 'blue'; // will be inherited @HostListener('click', ['$event']) // will be inherited onClick(event: Event) { console.log(`I am BaseComponent`);  } constructor(protected eleRef: ElementRef) { }  ngOnInit() { console.dir('BaseComponent:ngOnInit method has been called');  }}

exe-inherited.component.ts

import { Component, HostListener, OnChanges, SimpleChanges } from '@angular/core'; import { BaseComponent } from './exe-base.component'; @Component({  selector: 'exe-inherited',  template: `  <div>   exe-inherited:我是base組件么? - {{isBase}}  </div> ` }) export class InheritedComponent extends BaseComponent implements OnChanges { @HostListener('click', ['$event']) // overridden onClick(event: Event) { console.log(`I am InheritedComponent`);  }  ngOnChanges(changes: SimpleChanges) { console.dir(this.eleRef); // this.eleRef.nativeElement:exe-inherited }}

app.component.ts

import { Component, OnInit } from '@angular/core'; import {ManagerService} from "./manager.service"; @Component({ selector: 'exe-app', template: `  <exe-base></exe-base>  <hr/>  <exe-inherited [isBase]="false"></exe-inherited> ` }) export class AppComponent { currentPage: number = 1; totalPage: number = 5;}

接下來我們簡要討論一個可能令人困惑的主題,@Component() 中元數(shù)據(jù)是否允許繼承?答案是否定的,子組件是不能繼承父組件裝飾器中元數(shù)據(jù)。限制元數(shù)據(jù)繼承,從根本上說,是有道理的,因為我們的元數(shù)據(jù)用是來描述組件類的,不同的組件我們是需要不同的元數(shù)據(jù),如 selector、template 等。Angular 2 組件繼承主要還是邏輯層的復(fù)用,具體可以先閱讀完下面實戰(zhàn)的部分,再好好體會一下哈。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 隆安县| 云林县| 南平市| 镇原县| 安宁市| 黔西县| 阿拉善左旗| 平山县| 衢州市| 萨迦县| 灵武市| 乌恰县| 池州市| 洛阳市| 磴口县| 民勤县| 曲阳县| 江山市| 铁岭市| 佛教| 罗山县| 冀州市| 汨罗市| 疏勒县| 永德县| 邹平县| 南丹县| 瓮安县| 嘉黎县| 平塘县| 嘉祥县| 南开区| 新化县| 东明县| 时尚| 靖西县| 克什克腾旗| 东方市| 龙门县| 阳西县| 兖州市|