【问题标题】:Angular Can't bind to 'dirUnless' since it isn't a known propertyAngular 无法绑定到“dirUnless”,因为它不是已知属性
【发布时间】:2017-10-31 18:15:37
【问题描述】:

我想添加自定义,除非 directive*ngIf 相反。

这是我的代码:

import { Directive, TemplateRef, ViewContainerRef, Input } from '@angular/core';

@Directive({
    selector: '[dirUnless]'
})
export class UnlessDirective {
    @Input() set unless(condition: boolean) {
        if (!condition) {
            this.vcRef.createEmbeddedView(this.templateRef);
        } else {
            this.vcRef.clear();
        }
    }

    constructor(private templateRef: TemplateRef<any>, private vcRef: ViewContainerRef) {}
}

我还添加了下一个html

<div *ngIf="switch"> Conditional Text IF</div>
<div *dirUnless="switch">Conditional Text UNLESS</div>

所以当我单击switch 时,显然应该只显示一个div

但我有下一个错误:

未处理的 Promise 拒绝:模板解析错误:无法绑定到 'dirUnless' 因为它不是 'div' 的已知属性。 ("

【问题讨论】:

  • *ngIf="!switch" 呢?显然,这不是您的问题的答案,更多的是好奇。

标签: angular angular2-directives


【解决方案1】:

有两种选择:

1) 将 @Input 名称从 unless 更改为 dirUnless

@Input() set dirUnless(condition: boolean) {

2) 使用别名

@Input('dirUnless') set unless(condition: boolean) {

Plunker Example

【讨论】:

  • 同样的错误。我对 Angular 很陌生,不明白为什么当我删除 * 并简单地写
    Conditional Text UNLESS
    错误消失,但切换按钮不起作用(所以除非没有'什么都不做)
  • 你确定吗?请检查我上面的 plunker
  • 我已经仔细检查过了,我想知道为什么它对我不起作用。问题的原因可能是我的角度版本还是什么?
  • 我不这么认为,但谁知道呢。您使用的是什么角度版本?你可以构建 live example 或 github repo 吗?
  • 我发现了我的错误。问题是我没有在 NgModule 上声明我的指令。谢谢
【解决方案2】:

问题是我没有在 NgModule 上声明我的指令

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    相关资源
    最近更新 更多