当前位置: 首页 > 知识库问答 >
问题:

Angular2无法绑定到指令,因为它不是元素的已知属性

牛迪
2023-03-14

我生成了新的@Directive角CLI,

import { ContenteditableModelDirective } from './directives/contenteditable-model.directive';

import { ChatWindowComponent } from './chat-window/chat-window.component';

@NgModule({
  declarations: [
    AppComponent,
    ContenteditableModelDirective,
    ChatWindowComponent,
    ...
  ],
  imports: [
    ...
  ],
  ...
})

并且我尝试在我的组件中使用(ChatWindowComponent)

<p [appContenteditableModel] >
    Write message
</p>

即使within指令只是Angular CLI生成的代码:

 import { Directive } from '@angular/core';

 @Directive({
   selector: '[appContenteditableModel]'
 })
 export class ContenteditableModelDirective {

 constructor() { }

 }

我得到了错误:

zone.js:388 未处理的promise拒绝:模板解析错误:无法绑定到“appContenteditableModel”,因为它不是“p”的已知属性。

我尝试了几乎所有可能的变化,t

有帮助吗?

共有3个答案

束高雅
2023-03-14

我在共享模块中声明的指令时遇到了同样的问题。我正在使用此指令禁用窗体控件。

import { Directive, Input } from '@angular/core';
import { NgControl } from '@angular/forms';

@Directive({
  selector: '[appDisableControl]'
})
export class DisableControlDirective {

  constructor(private ngControl: NgControl) { }

  @Input('disableControl') set disableControl( condition: boolean) {
    const action = condition ? 'disable' : 'enable';
    this.ngControl.control[action]();
  }

}

要正常工作,请在共享模块(或您正在使用的任何模块)中声明并导出该指令。

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DisableControlDirective } from './directives/disable-control/disable-control.directive';

@NgModule({
  declarations: [
    DisableControlDirective
  ],
  imports: [
    CommonModule
  ],
  exports: [DisableControlDirective],
  providers: [],
  bootstrap: []
})
export class SharedModule { }

现在我们可以使用这个指令在任何模块

<input type="text" class="form-control" name="userName" formControlName="userName" appDisableControl [disableControl]="disable" />

错误的是,我只使用了选择器(appDisableControl)并将禁用参数传递给了它。但是要传递一个输入参数,我们必须像上面这样使用它。

东郭瀚玥
2023-03-14

如果使用共享模块来定义指令,请确保该指令由其定义的模块声明和导出。

// this is the SHARED module, where you're defining directives to use elsewhere
@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [NgIfEmptyDirective, SmartImageDirective],
  exports: [NgIfEmptyDirective, SmartImageDirective]
})
阎璞瑜
2023-03-14

将属性括在方括号 [] 中时,您正在尝试绑定到它。因此,您必须将其声明为@Input

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

@Directive({
 selector: '[appContenteditableModel]'
})
export class ContenteditableModelDirective {

  @Input()
  appContenteditableModel: string;

  constructor() { }

}

重要的是,成员(< code > appContenteditableModel )需要被命名为DOM节点上的属性(在本例中,是指令选择器)。

 类似资料:
  • 我必须动态地创建一个复选框列表 无法绑定到“for”,因为它不是已知的本机属性 angular2 新错误消息 未处理的promise拒绝:模板分析错误:无法绑定到“for”,因为它不是“label”的已知属性。 这是我的plnkr显示错误:http://plnkr.co/edit/aAQfWvHc7h7IBuYzpItO?p=preview 我的代码中哪里出错了?

  • 我在angular 2是新的,我试图做一个反应形式,但我有一些麻烦。在堆栈中找了很多遍后,我没有找到解决方案。 在这里你可以看到我的错误 代码: 希望这个答案能帮助别人。

  • 最近开始玩《棱角2》了。到目前为止都很棒。因此,为了学习使用我开始了一个个人演示项目。 有了基本的路由设置后,我现在想从报头导航到一些路由,但由于我的报头是的父路由,所以我收到这个错误。 app.component.html header.component.html 现在我部分地理解了,我猜由于该组件是的包装器,所以不可能通过这种方式访问。那么,对于这样的场景,是否有可能从外部访问导航呢? 如果

  • 如果“create-report-card-form”是一个角组件,并且它有“current reportcardcount”输入,则验证它是否是此模块的一部分。 项目结构 Home.Module html

  • 问题内容: 即使未显示组件,启动我的Angular应用程序时也会出现以下错误。 我必须将注释掉,这样我的应用才能正常工作。 我正在查看Hero插件,但与我的代码没有任何区别。 这是组件文件: 问题答案: 是的,就是这样,在app.module.ts中,我刚刚添加了:

  • 我不熟悉角度单元测试。。我正在尝试测试一个模态组件,但不断出现以下错误:“无法绑定到'formGroup',因为它不是'form'的已知属性。” 我尝试过将FormGroup、FormBuilder、Validator传递到测试提供程序中(因为它们是我正在测试的代码中使用的,所以我一次一个地将它们添加到一起),我还尝试将ReactiveFormsMoules添加到它中(与其他提供程序一起,而不与其