【问题标题】:Custom Directive -- Parser Error: Got interpolation ({{}}) where expression was expected自定义指令 - 解析器错误:得到插值 ({{}}) 表达式应为
【发布时间】:2019-08-10 13:16:23
【问题描述】:

我创建了一个自定义指令appFade,并尝试将其添加到子组件中,如下所示。这样做时,我得到“解析器错误:在需要表达式的地方得到插值 ({{}})。”罪魁祸首是:[appFade]="{{true}}"。我在Got interpolation ({{}}) where expression was expected 上看到:

{{}} never goes together with [prop]="..." or (event)="..."

我尝试摆脱插值和/或[ ] 和许多其他排列,但到目前为止没有任何效果。任何想法我应该如何修复我的代码?

自定义指令“appFade”:

import { Directive, Renderer, ElementRef, HostListener } from '@angular/core';
import { NgModuleResolver } from '@angular/compiler';

@Directive({
  selector: '[appFade]'
})
export class FadeDirective {

  constructor(private renderer : Renderer, private el : ElementRef) {
    el.nativeElement.style.opacity= '.6';
    el.nativeElement.style.transition = '.4s opacity'
   }

  @HostListener('mouseover') mouseover() {
    this.renderer.setElementStyle(this.el.nativeElement, 'opacity', '1');
  }

  @HostListener('mouseout') mouseout() {
    this.renderer.setElementStyle(this.el.nativeElement, 'opacity', '.6');
  }
}

HTML 文件:

  <app-repository-display [searchResults]="searchResults.repositories" [appFade]="{{true}}"></app-repository-display>

【问题讨论】:

    标签: angular


    【解决方案1】:

    您需要在标记中使用appFade fade="true",然后在您的@directive 类中创建一个@Input() fade: boolean; 来接收此值。如果您的目标只是为您的组件添加一个淡入淡出参数,那么您应该在那里将其配置为输入,而不是定义自定义指令。

    【讨论】:

    • 谢谢!那效果很好。还意识到,如果我希望它始终工作,我什至不需要 fade="true"。 appFade,独自一人,工作。
    • 真的。但从本质上讲,您可以将其绑定到 [fade]="toggleFadeState" 之类的东西上,这就是绑定的来源。
    • 非常感谢。好奇为什么在您的初始响应中使用了 fade="true",但在 [fade]="toggleFadeState" 中使用了“[ ]”(方括号)进行了 [fade]。我正在尝试明确了解何时需要“方括号”以及何时不需要。谢了!
    猜你喜欢
    • 2017-03-05
    • 2019-11-21
    • 2013-04-24
    • 2021-04-24
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多