36

在我的 Angular 4 应用程序中,我有一个接受字符串输入的组件:

<app-my-component [myInput]="'some string value'"></app-my-component>

在某些情况下,我需要在字符串中传递一个变量,例如:

<app-my-component [myInput]="'My name is ' + name + '!'"></app-my-component>

如果我可以使用es6 模板文字(又名模板字符串反引号字符串),那就太好了:

<app-my-component [myInput]="`My name is ${name}!`"></app-my-component>

但它不起作用:

未捕获的错误:模板解析错误:解析器错误:意外的标记词法分析器错误:表达式中第 1 列的意外字符 [`]

实现它的正确方法是什么?

4

3 回答 3

45

ES6 模板文字(模板字符串)不能在 Angular 组件输入中使用,因为Angular 编译器不知道这个语法。

你提供的方式很好。

<app-my-component [myInput]="'My name is ' + name + '!'"></app-my-component>

或者类似的东西,

在组件中,

// In the component, you can use ES6 template literal
name: string;
input: string;
    
ngOnInit() {
  this.name = 'Dinindu';
  this.input = `My name is ${this.name}!`;
}

在 HTML 中,

<app-my-component [myInput]="input"></app-my-component>

也可以这样使用。它非常接近模板文字,

<app-my-component myInput="My name is {{name}}"></app-my-component>
于 2017-11-01T15:04:01.193 回答
28

您仍然可以在属性值中使用 angular 的插值语法:

myInput="My name is {{ name }}!"

你喜欢写哪一个取决于你,但不幸的是,绑定表达式中不允许使用反引号。

于 2017-11-01T15:04:35.867 回答
0

只要模板存在于 TS 源而不是 HTML 中,就可以使用模板文字表达式。所以下面的不起作用

<app-my-component [myInput]="`My name is ${name}!`"></app-my-component>

但以下将起作用

let displayString: String = 'I work in a string literal - ';

@Component({
  selector: 'app-product-alerts',
  template: `
    ${displayString} Tada !!
  `,
  styleUrls: ['./product-alerts.component.css']
})

如果你想在这里探索实时代码是一个示例: https ://stackblitz.com/edit/angular-qpxkbd-urdema?file=src%2Fapp%2Fproduct-alerts%2Fproduct-alerts.component.ts

于 2021-06-06T09:18:39.500 回答