Skip to content

Commit d4719b2

Browse files
authored
fix: translate template-syntax guides (#945)
* chore: copy files * fix: translate template syntax guides
1 parent ca84af1 commit d4719b2

14 files changed

+1074
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# 属性バインディング
2+
3+
Angularの属性バインディングを使用すると、属性の値を直接設定できます。
4+
属性バインディングを使用すると、アクセシビリティを向上させ、アプリケーションを動的にスタイル設定し、複数のCSSクラスまたはスタイルを同時に管理できます。
5+
6+
## 構文
7+
8+
属性バインディングの構文は [プロパティバインディング](guide/templates/property-binding) に似ていますが、角括弧で囲まれた要素プロパティの代わりに、属性名の前に `attr` プレフィックスとドットを付けます。
9+
次に、属性値を文字列に変換される式で設定します。
10+
11+
<docs-code language="html">
12+
13+
<p [attr.attribute-you-are-targeting]="expression"></p>
14+
15+
</docs-code>
16+
17+
HELPFUL: 式が `null` または `undefined` に解決されると、Angularは属性を完全に削除します。
18+
19+
## ARIA 属性のバインディング
20+
21+
属性バインディングの主なユースケースの1つは、ARIA属性を設定することです。
22+
23+
ARIA属性にバインドするには、次のように入力します。
24+
25+
<docs-code header="src/app/app.component.html" path="adev/src/content/examples/attribute-binding/src/app/app.component.html" visibleRegion="attrib-binding-aria"/>
26+
27+
## `colspan` へのバインディング
28+
29+
属性バインディングのもう1つの一般的なユースケースは、テーブルの `colspan` 属性です。 `colspan` 属性にバインディングすると、テーブルをプログラムで動的に保つことができます。 アプリケーションがテーブルに表示するデータの量に応じて、行がまたがる列の数は変わる可能性があります。
30+
31+
`<td>` 属性 `colspan` で属性バインディングを使用するには
32+
33+
1. 次の構文を使用して `colspan` 属性を指定します。 `[attr.colspan]`
34+
1. `[attr.colspan]` を式に等しく設定します。
35+
36+
次の例では、`colspan` 属性を式 `1 + 1` にバインドしています。
37+
38+
<docs-code header="src/app/app.component.html" path="adev/src/content/examples/attribute-binding/src/app/app.component.html" visibleRegion="colspan"/>
39+
40+
このバインディングにより、`<tr>` は2つの列にまたがります。
41+
42+
HELPFUL: プロパティ名と属性名の間に違いがある場合があります。
43+
44+
`colspan``<td>` の属性ですが、大文字の "S" を使った `colSpan` はプロパティです。
45+
属性バインディングを使用する場合は、小文字の "s" を使った `colspan` を使用してください。
46+
47+
`colSpan` プロパティへのバインディング方法の詳細については、[プロパティバインディング](guide/templates/property-binding)[`colspan``colSpan`](guide/templates/property-binding#colspan-and-colspan) セクションを参照してください。
48+
49+
## 次へ
50+
51+
<docs-pill-row>
52+
<docs-pill href="guide/templates/class-binding" title="クラスとスタイルのバインディング"/>
53+
</docs-pill-row>
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# バインディングを理解する
2+
3+
Angularのテンプレートでは、バインディングによりテンプレートから作成されたUIの一部(DOM要素、ディレクティブ、またはコンポーネント)とモデル(テンプレートが属するコンポーネントインスタンス)間にライブ接続が確立されます。この接続はビューをモデルと同期させたり、ビューでイベントやユーザーアクションが発生したときにモデルに通知したり、その両方を行うために使用できます。Angularの [変更検知](best-practices/runtime-performance) アルゴリズムは、ビューとモデルを同期させる役割を担います。
4+
5+
バインディングの例には、次のようなものがあります。
6+
7+
* テキスト補間
8+
* プロパティバインディング
9+
* イベントバインディング
10+
* 双方向バインディング
11+
12+
バインディングには常に、_ターゲット_(バインドされた値を受け取るもの)と、_テンプレート式_(モデルから値を生成するもの)の2つの部分があります。
13+
14+
## 構文
15+
16+
テンプレート式はJavaScript式に似ています。
17+
多くのJavaScript式は有効なテンプレート式ですが、以下の例外があります。
18+
19+
副作用を持つ、または副作用を促進するJavaScript式は使用できません。具体的には、以下を含みます。
20+
21+
* 代入 (`=`, `+=`, `-=`, `...`)
22+
* `new`, `typeof`, または `instanceof` などの演算子
23+
* <code>;</code> または <code>,</code> を使用した式チェーン
24+
* インクリメントおよびデクリメント演算子 `++` および `--`
25+
* ES2015+ の演算子のいくつか
26+
27+
JavaScript構文からのその他の顕著な違いには、次のようなものがあります。
28+
29+
* `|``&` などのビット単位の演算子はサポートされていません。
30+
31+
## 式のコンテキスト
32+
33+
補間された式には、式が属するアプリケーションの特定の部分であるコンテキストがあります。通常、このコンテキストはコンポーネントインスタンスです。
34+
35+
次のスニペットでは、`recommended` 式と `itemImageUrl2` 式は、`AppComponent` のプロパティを参照しています。
36+
37+
<docs-code path="adev/src/content/examples/interpolation/src/app/app.component.html" visibleRegion="component-context" header="src/app/app.component.html"/>
38+
39+
式は、[テンプレート入力変数](guide/directives/structural-directives#shorthand)[テンプレート参照変数](guide/templates/reference-variables) などの、_テンプレート_ のコンテキストのプロパティも参照できます。
40+
41+
次の例では、`customer` のテンプレート入力変数を使用しています。
42+
43+
<docs-code path="adev/src/content/examples/interpolation/src/app/app.component.html" visibleRegion="template-input-variable" header="src/app/app.component.html (template input variable)"/>
44+
45+
次の例では、`#customerInput` のテンプレート参照変数を使用しています。
46+
47+
<docs-code path="adev/src/content/examples/interpolation/src/app/app.component.html" visibleRegion="template-reference-variable" header="src/app/app.component.html (template reference variable)"/>
48+
49+
HELPFUL: テンプレート式は、`undefined` を除いて、グローバル名前空間内のものは何も参照できません。 `window``document` は参照できません。また、`console.log()``Math.max()` を呼び出すことができず、式のコンテキストのメンバーの参照に限定されています。
50+
51+
### 名前衝突の防止
52+
53+
式が評価されるコンテキストは、テンプレート変数、ディレクティブのコンテキストオブジェクト(存在する場合)、およびコンポーネントのメンバーの結合です。
54+
複数の名前空間に属する名前を参照する場合、Angularは次の優先順位ロジックを適用してコンテキストを決定します。
55+
56+
1. テンプレート変数名
57+
1. ディレクティブのコンテキスト内の名前
58+
1. コンポーネントのメンバー名
59+
60+
変数が別のコンテキストの変数を隠すことを防ぐために、変数名を一意に保ちます。
61+
次の例では、`AppComponent` テンプレートは、`customer` のPadmaに挨拶します。
62+
63+
`@for` は、`customers` 配列内の各 `customer` をリスト表示します。
64+
65+
<docs-code path="adev/src/content/examples/interpolation/src/app/app.component.1.ts" visibleRegion="var-collision" header="src/app/app.component.ts"/>
66+
67+
`@for` 内の `customer` は、_@for_ によって定義された暗黙の `<ng-template>` のコンテキストにあります。これは、`customers` 配列内の各 `customer` を参照し、"Ebony" と "Chiho" を表示します。"Padma" は、その配列内に存在しないため表示されません。
68+
69+
一方、`<h1>` は、コンポーネントクラスの `customer` プロパティの値にバインドされた "Padma" を表示します。
70+
71+
## 式のベストプラクティス
72+
73+
テンプレート式を使用する際には、次のベストプラクティスに従ってください。
74+
75+
* **短い式を使用する**
76+
77+
可能な限り、プロパティ名やメソッド呼び出しを使用します。アプリケーションロジックとビジネスロジックは、開発とテストが可能なコンポーネントに保持します。
78+
79+
* **迅速な実行**
80+
81+
Angularは、変更検知サイクルのたびにテンプレート式を実行します。Promise解決、HTTP結果、タイマーイベント、キー押下、マウス移動など、多くの非同期アクティビティが変更検知サイクルをトリガーします。
82+
83+
特に低速なデバイスでは、ユーザー体験をできるだけ効率的にするために、式は迅速に終了する必要があります。計算に多くのリソースを必要とする場合は、値をキャッシュすることを検討してください。
84+
85+
## 可視的な副作用なし
86+
87+
Angularの単方向データフローモデルに従って、テンプレート式は、ターゲットプロパティの値以外、アプリケーションの状態を変更すべきではありません。コンポーネントの値を読み取ることは、他の表示される値を変更すべきではありません。ビューは、1回のレンダリングパス全体で安定している必要があります。
88+
89+
<docs-callout title='冪等な式は副作用を減らします'>
90+
91+
[冪等](https://ja.wikipedia.org/wiki/%E5%86%AA%E7%AD%89) な式は副作用がなく、Angularの変更検知のパフォーマンスを向上させます。Angularの用語では、冪等な式は、依存する値のいずれかが変更されるまでは、常に _まったく同じもの_ を返します。
92+
93+
依存する値は、イベントループの1回のターン中に変更されるべきではありません。べき等な式が文字列または数値を返す場合、それを連続して2回呼び出した場合、同じ文字列または数値を返します。式がオブジェクト(`array` を含む)を返す場合、それを連続して2回呼び出した場合、同じオブジェクト _参照_ を返します。
94+
95+
</docs-callout>
96+
97+
## 次へ
98+
99+
<docs-pill-row>
100+
<docs-pill href="guide/templates/property-binding" title="プロパティバインディング"/>
101+
<docs-pill href="guide/templates/event-binding" title="イベントバインディング"/>
102+
</docs-pill-row>
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# クラスとスタイルのバインディング
2+
3+
クラスとスタイルのバインディングを使用して、要素の `class` 属性からCSSクラス名を追加および削除したり、スタイルを動的に設定したりします。
4+
5+
## 単一の CSS `class` へのバインディング
6+
7+
単一のクラスバインディングを作成するには、次のように入力します。
8+
9+
`[class.sale]="onSale"`
10+
11+
バインドされた式 `onSale` が真の場合、Angularはクラスを追加し、式が偽の場合、クラスを削除します。ただし、`undefined` を除きます。`undefined` の動作は、要素上の異なるディレクティブで同じクラスに複数のバインディングが存在する場合に特に役立ちます。
12+
13+
## 複数の CSS クラスへのバインディング
14+
15+
複数のクラスにバインドするには、次のように入力します。
16+
17+
`[class]="classExpression"`
18+
19+
式は次のいずれかになります。
20+
21+
* クラス名のスペース区切り文字列。
22+
* クラス名をキー、真または偽の式を値とするオブジェクト。
23+
* クラス名の配列。
24+
25+
オブジェクト形式を使用すると、Angularは関連付けられた値が真の場合にのみクラスを追加します。
26+
27+
IMPORTANT: オブジェクトのような式(`object``Array``Map``Set` など)を使用する場合、Angularがクラスリストを更新するにはオブジェクトのIDが変更されている必要があります。
28+
オブジェクトのIDを変更せずにプロパティを更新しても、効果はありません。
29+
30+
同じクラス名に複数のバインディングがある場合、Angularはスタイリングの優先順位を使用して、どのバインディングを使用するかを決定します。
31+
32+
次の表は、クラスバインディング構文をまとめたものです。
33+
34+
| バインディングの種類 | 構文 | 入力の種類 | 入力値の例 |
35+
|:--- |:--- |:--- |:--- |
36+
| 単一のクラスバインディング | `[class.sale]="onSale"` | <code>boolean | undefined | null</code> | `true``false` |
37+
| 複数のクラスバインディング | `[class]="classExpression"` | `string` | `"my-class-1 my-class-2 my-class-3"` |
38+
| 複数のクラスバインディング | `[class]="classExpression"` | <code>Record<string, boolean | undefined | null></code> | `{foo: true, bar: false}` |
39+
| 複数のクラスバインディング | `[class]="classExpression"` | <code>Array<string></code> | `['foo', 'bar']` |
40+
41+
## 単一のスタイルへのバインディング
42+
43+
単一のスタイルバインディングを作成するには、プレフィックス `style` の後にドットとCSSスタイルの名前を続けます。
44+
45+
たとえば、`width` スタイルを設定するには、次のように入力します。`[style.width]="width"`
46+
47+
Angularは、通常は文字列であるバインドされた式の値にプロパティを設定します。オプションで、`em``%` などの単位拡張子を付けることができます。これには数値型が必要です。
48+
49+
1. スタイルをダッシュケースで記述するには、次のように入力します。
50+
51+
<docs-code language="html"><nav [style.background-color]="expression"></nav></docs-code>
52+
53+
2. スタイルをキャメルケースで記述するには、次のように入力します。
54+
55+
<docs-code language="html"><nav [style.backgroundColor]="expression"></nav></docs-code>
56+
57+
## 複数のスタイルへのバインディング
58+
59+
複数のスタイルを切り替えるには、`[style]` 属性にバインドします(例:`[style]="styleExpression"`)。`styleExpression` は次のいずれかになります。
60+
61+
* `"width: 100px; height: 100px; background-color: cornflowerblue;"` などのスタイルの文字列リスト。
62+
* `{width: '100px', height: '100px', backgroundColor: 'cornflowerblue'}` などの、スタイル名をキー、スタイル値を値とするオブジェクト。
63+
64+
`[style]` に配列をバインドすることはサポートされていないことに注意してください。
65+
66+
IMPORTANT: `[style]` をオブジェクト式にバインドする場合、Angularがクラスリストを更新するにはオブジェクトのIDが変更されている必要があります。
67+
オブジェクトのIDを変更せずにプロパティを更新しても、効果はありません。
68+
69+
### 単一スタイルと複数スタイルのバインディングの例
70+
71+
<docs-code path="adev/src/content/examples/attribute-binding/src/app/single-and-multiple-style-binding.component.ts" header="nav-bar.component.ts"/>
72+
73+
同じスタイル属性に複数のバインディングがある場合、Angularはスタイリングの優先順位を使用して、どのバインディングを使用するかを決定します。
74+
75+
次の表は、スタイルバインディング構文をまとめたものです。
76+
77+
| バインディングの種類 | 構文 | 入力の種類 | 入力値の例 |
78+
|:--- |:--- |:--- |:--- |
79+
| 単一のスタイルバインディング | `[style.width]="width"` | <code>string | undefined | null</code> | `"100px"` |
80+
| 単一のスタイルバインディング(単位付き) | `[style.width.px]="width"` | <code>number | undefined | null</code> | `100` |
81+
| 複数のスタイルバインディング | `[style]="styleExpression"` | `string` | `"width: 100px; height: 100px"` |
82+
| 複数のスタイルバインディング | `[style]="styleExpression"` | <code>Record<string, string | undefined | null></code> | `{width: '100px', height: '100px'}` |
83+
84+
## スタイリングの優先順位
85+
86+
単一のHTML要素には、CSSクラスリストとスタイル値が複数のソース(たとえば、複数のディレクティブからのホストバインディング)にバインドされている場合があります。
87+
88+
## 次へ
89+
90+
<docs-pill-row>
91+
<docs-pill href="/guide/components/styling" title="コンポーネントのスタイリング"/>
92+
<docs-pill href="/guide/animations" title="Angularアニメーションの概要"/>
93+
</docs-pill-row>

0 commit comments

Comments
 (0)