2

我有繼承和裝飾一些使用情況下(如在裝飾圖案)和指示與基本模板組件,它不適合這種情況下,更容易定義一個新的模板,而不是以編程方式修改現有的DOM模板。組件元數據的其餘部分應該被繼承。擴展/在角2.</p> <p>示例裝飾角2個部件和部件的指令

基本上它是

export const BASE_SOME_COMPONENT_METADATA = { ... }; 

@Component(BASE_SOME_COMPONENT_METADATA); 
export class BaseSomeComponent { ... } 

... 

import { BaseSomeComponent, BASE_SOME_COMPONENT_METADATA } from '...'; 

@Component(Object.assign({}, BASE_SOME_COMPONENT_METADATA, { template: '...' }); 
export class SomeComponent extends BaseSomeComponent {} 

,更復雜的情況是

@Component({ ... }); 
export class ThirdPartyComponent { 
    @Input() ...; 
    @Input() ...; 
    @Input() ...; 
    ... 
} 

... 

import { ThirdPartyComponent as BaseThirdPartyComponent } from '...'; 

@Component({ 
    // may modify or replace any of the original properties 
    template: ..., 
    styles: ... 
    ... 
}); 
export class ThirdPartyComponent extends BaseThirdPartyComponent {} 

注意ThirdPartyComponent具有衆多輸入。有時可能會在內部修改組件而不是包裝它並從外部修改其行爲。枚舉所有這些模板和轉移他們ThirdPartyComponent包裝部件可能是溼濁:

由包裝部件引入
<third-party inputs="inputs" that="that" should="should" be="be" enumerated="enumerated"> 

額外的佈局元素在某些情況下被禁止。

ThirdPartyComponent可能是其他第三方組件使用的核心組件(按鈕)。然後它們也應該受到影響,所以可能有必要在整個噴射器上「裝飾裝飾器」,而不僅僅是擴展它。

In Angular 1.x thirdPartyDirective是一種可以完全訪問組件DDO的服務,因此它們可以進行裝飾,擴展,深炸等等。Angular 2中的這種方法的直接對應方式是什麼? 如果這打破了一些規則並使保修失效,那就沒問題。

如何擴展不導出元數據的組件/指令?

如何修改現有組件的元數據?

回答

2

您的輸入將自動從父類繼承。關於Component裝飾器本身的屬性,在Angular2中沒有原生的方法。 Angular2團隊不會爲此提供支持:https://github.com/angular/angular/issues/7968#issuecomment-219865739

如果你真的想這樣的事情,你需要與更新註釋的定製的裝飾來實現......

這篇文章能吸引你:

+0

問題輸入引用指的是一個包裝器組件,它被強制執行。在模板中。我已經在Ng中分享了這些內容,最終以編譯方式以編程方式添加了attrs。我試圖找出配方在Ng2中有效地做這樣的事情。 – estus

+0

順便說一句,很棒的閱讀,謝謝你的鏈接。其實,我發現你的[這個答案](http://stackoverflow.com/a/36837482/3731501)大部分回答了這個問題。 – estus