如何使用es6模板文字作为角度组件输入

时间:2017-11-01 14:56:40

标签: javascript angular typescript ecmascript-6 template-literals

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

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

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

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

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

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

但它不起作用:

  

未捕获错误:模板解析错误:   分析器错误:意外的令牌Lexer错误:表达式

中第1列的意外字符[`]

完成它的正确方法是什么?

3 个答案:

答案 0 :(得分:11)

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

您提供的这种方式很好。

FindElement(By.XPath("//span[normalize-space(.) = 'yes']")

或类似的东西,

在组件中,

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

在html中,

// In the component you can use ES6 template literal
name: string;
input: string;

ngOnInit() {
  this.name = 'some name;
  this.input = `My name is ${this.name}!`;
}

答案 1 :(得分:6)

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

var configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", reloadOnChange: true)
    //...
    .Build();

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    //...
    .CreateLogger();

这取决于您喜欢编写的内容,但遗憾的是,绑定表达式中不允许使用反引号。

答案 2 :(得分: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