私はAngular 2を学んでいて、いくつかの新しいことに出くわしました。ChromeブラウザのScratchJS拡張機能を使用してTypeScriptを学習しました。その間、これはバックティック( `)文字列に対して私がしたこと:
let user='user';
let msg=`Welcome ${user}!
I can write multi-line string.
This is awesome!
`;
console.log(msg);
ご覧のとおり、これは変数userが文字列で使用される方法です。しかし、Angular 2プロジェクトで同じことをすると、少し異なります(そして、上記のようなことをするとエラーがスローされます)。私のダミーAngular = 2プロジェクト、私は単純なコンポーネントを作りました:
import { Component} from '@angular/core';
@Component({
selector: 'app-user',
template: `
Hi, {{user}}
I can write multi-line string.
This is awesome!
`,
styles: []
})
export class UserComponent {
user:string='John Doe';
constructor() {
}
}
これは機能します。しかし、ここでは、以下を使用して文字列補間を使用しています。
{{}}
の代わりに:
${}
そして、それを使用すると、エラーがスローされます。私はいくつかの事実を誤解していることを知っています。しかし、誰がそれを説明できますか?
{{ foo }}
はAngular
のテンプレートエンジンによって処理され、クラスで定義されているfooプロパティをバインドします。
${ bar }
はJavascript string interpolation
によって処理され、レンダリング中はオブジェクトのプロパティbar
が何であるかを知る手がかりがありません。
これはAngular
の動作に密接に関連しているものであり、TypeScript
やその他には関係ありません。 Angular
プロジェクトに参加していない場合、またはテンプレートに参加していない場合でも、${}
を使用できます。
たとえば、式は返される前に評価され、テンプレートエンジンに依存しないため、次のようなものが機能するはずです。
public getUsername(): string {
let username = 'test';
return `Hi ${username}`;
}
${}
TypeScriptコード間の文字列の値を表示するための文字列補間です。そして{{}}
は、HTMLテンプレートでコンテンツを表示するための補間です。