结构指令,我可以得到属性值,而不是计算布尔值

问题描述:

我知道可以使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(); 
     } 
    } 

也许结构性指令的指令组件代码中的检查是错误的,这种事情?它只是觉得,我需要的地方包装组件都是矫枉过正的。

当使用绑定属性,角预计的变量。

不绑定属性第一个例子,你可以使用一个字符串直接

<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

我不这么认为。结构指令被处理为绑定属性。 –

如何约

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

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

+0

你知道吗,我显然不理解这个指示性的东西。所以,如果我错了,嘲笑我,但是我想,当你把一个像'something.length> 0'这样的表达式或者其他东西,它只是*逃避*并且通过了结果。但现在,我只是困惑,它看起来像* evals *它或只是传入变量,如果它的字符串? – AmmarCSE

+0

在我的解决方案中,您传递一个字符串'一些空间分隔值',在您的解决方案中,您传递变量一些空间分隔值不存在于指令 – kit