在我的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列的意外字符[`]
完成它的正确方法是什么?
答案 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