2016-09-22 173 views
0

我知道可以使custom structural directives結構指令,我可以得到屬性值,而不是計算布爾值

<p *my-unless="someExpression"> 

然而,引號之間的表達與得到的布爾值計算

@Input() set myUnless(condition: boolean) { 
    console.log(condition);//either true, false, or undefined 
} 

我怎樣才能使它所以我只是得到一個原始字符串值傳遞,這樣,如果我做了

<p *my-unless="some space delimted values"> 

我能做

@Input() set myUnless(theString: string) { 
    console.log(theString);//=> theString == 'some space delimted values' 
} 

最後,我想提出一個角色的限制指令中所允許的角色的屬性值中說,我不喜歡

@Input() 
    set forRoles(allowedRoles: string) { 
     let userTypes = allowedRoles.split(' '); 
     if(~userTypes.indexOf(this.authenticatorService.getUserType())){ 
      this.viewContainer.createEmbeddedView(this.templateRef); 
     } else { 
      this.viewContainer.clear(); 
     } 
    } 

也許結構性指令的指令組件代碼中的檢查是錯誤的,這種事情?它只是覺得,我需要的地方包裝組件都是矯枉過正的。

回答

1

當使用綁定屬性,角預計的變量。

不綁定屬性第一個例子,你可以使用一個字符串直接

<my-component someInput="some space delimted values"></my-component> 

但是如果你使用綁定,您必須使用單引號。

<my-component [someInput]="'some space delimted values'"></my-component> 

結構指令的行爲是一樣的綁定屬性,所以必須添加單引號:

<p *my-unless="'some space delimted values'"> 
+0

謝謝。那麼我會首先與你的第一個建議一起去。非綁定屬性。但是,如果我這樣做了,因爲它正在尋找一個綁定屬性,所以我得到'沒有TemplateRef!的提供者?我想,換個方式,我可以制定一個不受限制的自定義指令嗎? – AmmarCSE

+0

我不這麼認爲。結構指令被處理爲綁定屬性。 –

1

如何約

<p *my-unless="'some space delimted values'"> 
+0

哇。只是哇。有效! :-) – AmmarCSE

+0

你知道嗎,我顯然不理解這個指示性的東西。所以,如果我錯了,嘲笑我,但是我想,當你把一個像'something.length> 0'這樣的表達式或者其他東西,它只是*逃避*並且通過了結果。但現在,我只是困惑,它看起來像* evals *它或只是傳入變量,如果它的字符串? – AmmarCSE

+0

在我的解決方案中,您傳遞一個字符串'一些空間分隔值',在您的解決方案中,您傳遞變量一些空間分隔值不存在於指令 – kit