2016-11-02 48 views
5

我想將屬性添加到我在angular 2組件實現中創建的自定義選擇器。將屬性添加到Angular 2組件選擇器

@Component({ 
selector: 'my-node',  // add attributes to this selector 
template: `<div> <ng-content></ng-content> </div>`  
}) 

所以,當我做<my-node> DOM的這些額外的屬性

<my-node flex="25" layout="row">

生成的選擇,我不想硬編碼這些屬性每次我做<my-node>時間。我希望這些屬性成爲選擇器構建模板的一部分。

像這樣的事情是林尋找,但在API

@Component({ 
selector: 'my-node',  
selectorAttributes: `layout="row"` // generates <my-node layout="row"> 
template: `<div> <ng-content></ng-content> </div>`  
}) 
+1

你到底想達到什麼目的?爲什麼不把它們放在模板的根元素上? – jonrsharpe

+1

你有沒有試過@HostBinding? – yurzui

回答

7

@Component元數據屬性的使用host沒有看到這樣的事情。

@Component({ 
    selector: 'my-node',  // add attributes to this selector 
    template: `<div> <ng-content></ng-content> </div>`, 
    host: { // this is applied to 'my-node' in this case 
     "[class.some-class]": "classProperty", 
     "[attr.some-attr]": "attrProperty", 
    }, 
}) 

這裏是一個例子plunk。見app/app.component.ts

+0

添加主機:'[attr] =「componentProp」'錯誤,請問您是否可以通過此「主機:」實施鏈接到文檔? – ndesign11

+0

對不起,這是不正確的,更新我的答案 –

+0

很確定這是我所需要的但仍然得到錯誤。 '不能綁定到'attr',因爲它不是'my-node'的已知屬性。' – ndesign11

5

另一種選擇是使用HostBinding dectorator

@HostBinding('attr.layout') 
layout = 'row'; 
+0

這一個對我很好。我認爲這是最好的解決方案,因爲您可以將其放在其他類變量旁邊,如輸入,輸出,私人/公共組件信息等。它還允許您預測設置值並獲取Typescript來分析代碼,如果您想要評估一個函數作爲你的HostBinding值。 – vincecampanale