Angular の一方向データ バインディングの概要
Angular の一方向データ バインディングは、コンポーネントからビュー (DOM) に、またはその逆に、ビューからコンポーネントにデータをバインドする方法です。基になるデータの変更ごとに自動的に同期される情報をエンドユーザーに表示するために使用されます。これは、WPF の一方向バインディングに似ています。
Angular データ バインディングの概要
データ バインディングは、このタイプのサービスにより UI の更新プロセスが大幅に効率化され、アプリ構築時の定型文の量も削減されるため広く使用されています。Angular のデータ バインディングは非常に簡単で、WPF とは異なり、データ コンテキスト、ビューモデル、または INotifyPropertyChanged
(INPC) の定義は必要ありません。必要なのは、HTML ファイルと typescript ファイルのみです。データ バインディングでは、最初にバインドするプロパティが必要です。それでは、text
というプロパティをコンポーネント クラスに追加し、その値を設定しましょう。
WPF では、DataContext を設定し、XAML でプロパティをバインドします。
public class IgniteUIClass
{
public string Text { get; set; }
public IgniteUIClass()
{
this.Text = "IgniteUI for Angular";
}
}
...
public MainWindow()
{
InitializeComponent();
this.DataContext = new IgniteUIClass();
}
<Label Content="{Binding Path=Text, Mode=OneWay}"></Label>
Angular では、DOM プロパティをコンポーネントのプロパティに直接バインドしています。
export class SampleComponent implements OnInit {
text = 'IgniteUI for Angular';
constructor() { }
ngOnInit() {}
}
<h2>{{ text }}</h2>
Angular データ バインディングの補間
上記のコードでは、text
プロパティの値へのバインディングを使用して、HTML にテキストを表示するだけです。ここでは、補間
を使用して一方向のバインディングを作成しています。次に二重中括弧、プロパティの名前 (ここでは text
)、2 つの閉じ中括弧を入力します。同じ結果となる他の方法として、補間
構文を再度使用して、h2 タグを作成し、text
プロパティをその innerHTML プロパティにバインドがあります。
<h2 innerHTML="{{ text }}"></h2>
補間
には 2 つの重要なことがあります。
- 1 つ目は、中括弧内のすべてが
string
としてレンダリング、 - 2 つ目は、中括弧内のすべてが
テンプレート式
として参照されることです。これにより、連結などのより複雑な処理ができます。
たとえば、いくつかのテキストを text
プロパティの値と連結してみましょう。
<h2>{{"Welcome to " + text }}</h2>
テンプレート式を使用すると、javascript のプロパティとメソッドにもバインドできます。たとえば、text
プロパティの長さにバインドすると、20 という結果になります。
<h2>{{ text.length }}</h2>
toUpperCase()
など、そのプロパティのメソッドにバインドすることもできます。
<h2>{{ text.toUpperCase() }}</h2>
これは、WPF のデータ バインディングよりも高機能で、非常に使いやすくなっています。テンプレート式内で数学的計算を行うこともできます。たとえば、式に単純に 2 + 2 を入力すると、4 に等しい結果が表示されます。
<h2>{{ 2 + 2 }}</h2>
もう 1 つの機能は、typescript ファイルから実際のメソッドへのバインドです。これを実現する方法の簡単な例を次に示します。
<h2>{{ getTitle() }}</h2>
この getTitle()
は、typescript ファイルで定義されているメソッドです。ページ上の結果は、そのメソッドの戻り値です。
getTitle() {
return 'Simple Title';
}
補間
は非常に強力に見えますが、たとえば、string のみを表すという制限があります。
それでは、コンポーネント クラスに単純なブール プロパティを作成しましょう。
export class SampleComponent implements OnInit {
text = 'IgniteUI for Angular';
isDisabled = false;
constructor() { }
...
テキストタイプの単純な input
を作成し、isDisabled
プロパティを入力の disabled
プロパティにバインドします。
<input type="text" disabled="{{ isDisabled }}">
結果は、input
が有効のはずですが、無効になっています。これは、補間
によって文字列が返されますが、入力の disabled プロパティはブール型であり、ブール値が必要なためです。
これを正しく機能させるために、Angular はプロパティ バインディング
を提供します。
Angular プロパティ バインディング
Angular のプロパティ バインディングは、HTML 要素またはディレクティブのターゲットプロパティの値をバインドするために使用されます。ここでの構文は、補間の構文とは少し異なります。プロパティ バインドでは、プロパティ名は角かっこで囲まれ、その値には中かっこは含まれません。バインドされるプロパティの名前だけです。
<input type="text" [disabled]="isDisabled">
プロパティ バインディングを使用することにより、入力の disabled
プロパティは、文字列ではなくブール値の結果にバインドされます。isDisabled
値は false であり、アプリを実行すると、入力が有効として表示されます。
Note
バインディングがデータ型の結果に依存する場合、プロパティ バインディング
を使用する必要があることに注意してください。バインディングが単に文字列値に依存している場合は、補間
を使用する必要があります。