【问题标题】:Structural directive where I can get attribute value instead of computed boolean我可以获得属性值而不是计算布尔值的结构指令
【发布时间】:2016-09-22 21:27:13
【问题描述】:

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

也许结构指令对于这种事情是错误的?只是觉得我需要的任何地方的包装器组件都过大了。

【问题讨论】:

    标签: angular


    【解决方案1】:

    当使用绑定属性时,Angular 需要一个变量。

    第一个没有绑定属性的例子,可以直接使用字符串

    <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'">
    

    【讨论】:

    • 谢谢。我最初会接受你的第一个建议。非绑定属性。但是,如果我这样做,我会得到No provider for TemplateRef!,因为它正在寻找绑定属性?我想,换一种说法,我可以制作一个未绑定的自定义指令吗?
    • 我不这么认为。结构指令像绑定属性一样处理。
    【解决方案2】:

    怎么样

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

    【讨论】:

    • 你知道,我显然不明白这个指令的东西。所以,如果我错了,请笑话我,但我想当你输入像 something.length &gt; 0 或其他类似的表达式时,它只是 evaled 它并传递了结果。但是现在,我只是感到困惑,它看起来要么是 evals 它,要么只是传入变量(如果它是一个字符串)?
    • 在我的解决方案中,您传递一个字符串“一些空格分隔值”,在您的解决方案中,您传递变量一些在指令上下文中不存在的空格分隔值
    • 谢谢,我现在明白了 :-)
    猜你喜欢
    • 2013-03-21
    • 2015-07-03
    • 2012-04-30
    • 2014-09-12
    • 2022-11-14
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多