Angular2 无法绑定(bind)到 DIRECTIVE,因为它不是元素的已知属性

标签 angular typescript directive

我通过 Angular CLI 生成了新的 @Directive,它被导入到我的 app.module.ts

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 拒绝:模板解析错误: 无法绑定(bind)到“appContenteditableModel”,因为它不是“p”的已知属性。

我尝试了几乎所有可能的更改,遵循此 angular docs一切都应该有效,但事实并非如此。

有什么帮助吗?

最佳答案

当用方括号 [] 包裹一个属性时,您正试图绑定(bind)到它。因此,您必须将其声明为 @Input

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

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

  @Input()
  appContenteditableModel: string;

  constructor() { }

}

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

关于Angular2 无法绑定(bind)到 DIRECTIVE,因为它不是元素的已知属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705819/

相关文章:

angular - 如何正确取消请求?

angular - 将两个小数位添加到数字TypeScript Angular

javascript - $timeout 仍然是等待 Angular 指令模板的最佳实践吗?

javascript - 当用户更改窗口高度时如何触发 Angular 中的事件?

javascript - tsconfig 文件中存在语法错误?

angular - 将 Angular 1.x 指令转换为 Angular 2

angular - 如何以 Angular 方式在 svg 中导入字体很棒的图标?

javascript - 带有 highcharts 的 Angular4 不能使用 world.js

javascript - 注销 session Angular2 NodeJS

angular - BehaviorSubject 无法通过订阅接收值