AngularJS 式: 配列、オブジェクト、$eval、文字列

⚡ スマートサマリー

AngularJS 式は、二重中括弧で囲まれたコード断片で、データをテンプレートに直接バインドします。数値、文字列、オブジェクト、配列を評価し、コントローラー内から $eval 関数を使用することで同様の評価を実行できます。

  • 🧩 バインディング構文: Double 中括弧は式が配置されている場所に値を表示し、ng-bind ディレクティブと同じ結果をもたらします。
  • 🔢 サポートされているタイプ: Numbers、文字列、 Javaドット表記でアクセスされるスクリプトオブジェクト、およびインデックスでアクセスされる配列は、すべて正しく評価されます。
  • 🏷️ インライン変数: ng-initディレクティブは、式がコントローラなしで読み取ることができるビューレベルの変数を宣言します。
  • 🛡️ 寛容な評価: 未定義のプロパティは、ReferenceError をスローするのではなく、undefined を返します。 Javaスクリプトが上昇するだろう。
  • 🚫 ハード制限: ループ、例外処理、関数宣言、正規表現、およびカンマ演算子とvoid演算子は使用できません。
  • ⚙️ コントローラーの評価: $scope.$eval は、コントローラ コード内の式文字列を評価し、その結果をビューに公開します。
  • ⚠️ サポート状況: AngularJSは2021年12月31日にサポートが終了し、それ以降セキュリティパッチは提供されません。

AngularJS 式

AngularJSの式とは何ですか?

式とは、二重括弧の中に記述された変数のことです。 {{ }}これらはAngularJSで非常によく使われており、このシリーズの以前のチュートリアルでも頻繁に登場します。

⚠️ サポートに関するお知らせ: AngularJSが到達 2021年12月31日をもって販売終了となります。 今後パッチやセキュリティ修正は提供されません。以下の構文は既存のAngularJS 1.xアプリケーションの保守には有効ですが、新規プロジェクトでは最新のバージョンを使用する必要があります。 角度の補間括弧は依然として存在するが ng-init (NAIST) と $eval しない。

AngularJS式を例を用いて説明します

AngularJS の式は、次のように二重中括弧の中に記述します。 {{expression}}.

構文: 式の簡単な例は次のとおりです。 {{5 + 6}}.

AngularJSの式は、ng-bindディレクティブと同様の方法でデータをHTMLにバインドし、AngularJSは式が配置された場所に正確にデータを表示します。

この例では、単純な数の加算を式として示します。

AngularJS 式

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>
</head>
<body>

    <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

    <h1>Guru99 Global Event</h1>

    <div ng-app="">
        Addition : {{6+9}}
    </div>

</body>
</html>

Code 説明:

  1. ng-app ディレクティブは空白です。これは、モジュールがコントローラーを提供していないことを意味します。 ディレクティブまたは、このページへのサービス。
  2. 簡単な式で2つの数を足し合わせる。

出力:

AngularJS 式

9と6の足し算が行われ、結果として15が表示されます。

AngularJS Numbers

式は数値を扱います。この例では、2 つの数値変数を乗算します。 margin (NAIST) と profitそして、製品を表示します。

AngularJS Numbers

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>
</head>
<body>

    <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

    <h1>Guru99 Global Event</h1>

    <div ng-app="" ng-init="margin=2;profit=200">
        Total profit margin

        {{margin*profit}}
    </div>

</body>
</html>

Code 説明:

  1. ng-init ディレクティブは、ビュー自体の中で変数とその値を定義します。これは、他の言語のローカル変数とよく似ています。 プログラミング言語。 ここに margin (NAIST) と profit 宣言され、割り当てられる。
  2. この式は、それら2つのローカル変数を乗算する。

出力:

AngularJS Numbers

2と200の乗算が行われ、積である400が表示されます。

AngularJS 文字列

式は文字列でも機能します。この例では、 firstName (NAIST) と lastName そして両方を表示します。

AngularJS 文字列

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>
</head>
<body>

    <script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

    <h1>Guru99 Global Event</h1>

    <div ng-app="" ng-init="firstName='Guru';lastName='99'">
        First Name : {{firstName}}<br>
        Last Name : {{lastName}}
    </div>

</body>
</html>

Code 説明:

  1. ng-init ディレクティブは、 firstName 値「Guru"と lastName 値は「99」です。
  2. {{firstName}} (NAIST) と {{lastName}} それらの変数を読み込み、ビューに表示する。

出力:

AngularJS 文字列

両方の値が画面に表示されます。

AngularJSオブジェクト

式は Javaスクリプト オブジェクトは、名前と値のペアで構成されます。 Javaスクリプトオブジェクトは次のようになります。

var car = {type: "Ford", model: "Explorer", color: "White"};

この例では、 person 2つのキーと値のペアを保持するオブジェクト、 firstName (NAIST) と lastName.

AngularJSオブジェクト

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

<h1>Guru99 Global Event</h1>

<div ng-app="" ng-init="person={firstName:'Guru',lastName:'99'}">
    First Name : {{person.firstName}}<br>
    Last Name : {{person.lastName}}
</div>

</body>
</html>

Code 説明:

  1. ng-init ディレクティブはオブジェクトを定義します person キーと値のペアで firstName に設定 "Guru"と lastName 「99」に設定されています。
  2. {{person.firstName}} (NAIST) と {{person.lastName}} これらのメンバーを読み取ってください。これらはオブジェクトに属しているため、その値にアクセスするにはドット表記が必要です。

出力:

AngularJSオブジェクト

の値 firstName (NAIST) と lastName 画面に表示される。

AngularJS 配列

式は配列と連携して機能します。この例では、生徒の3つの科目の成績を格納する配列を定義し、それぞれの値を表示します。

AngularJS 配列

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

<h1>Guru99 Global Event</h1>

<div ng-app="" ng-init="marks=[1,15,19]">
    Student Marks<br>
    Subject1 : {{marks[0]}}<br>
    Subject2 : {{marks[1]}}<br>
    Subject3 : {{marks[2]}}
</div>

</body>
</html>

Code 説明:

  1. ng-init ディレクティブは配列を定義します marks 3つの値は1、15、19です。
  2. 形式の表現 marks[index] 各要素を読んでください。

出力:

AngularJS 配列

配列で定義されたマークが表示されます。

AngularJS 式の機能と制限事項

機能

  1. AngularJS の式は Javaスクリプト式と は、同じようなパワーと柔軟性を多く共有しています。
  2. 場所 Javaスクリプトが未定義のプロパティに対して ReferenceError または TypeError を発生させますが、AngularJS の評価は寛容で、undefined または null を返します。
  3. 式の中にフィルターを適用することで、データを表示する前にフォーマットを整えることができます。
  4. 三項演算子がサポートされているので、 {{ isReady ? 'Yes' : 'No' }} 有効です。

製品制限

  1. AngularJS 式の中では、ループと例外処理は使用できません。条件ロジックは三項演算子に限定されます。 if 明細書は入手できません。
  2. 関数は式の中で宣言することはできません。ng-init ディレクティブ内でも同様です。
  3. 正規表現は式の中に作成することはできません。正規表現は、次のような文字列を照合するために使用される記号と文字の組み合わせです。 .*\.txt$、そしてそのようなリテラルは拒否されます。
  4. コンマ演算子(,)と void オペレーターは許可されていません。

ng-bindと式中括弧:どちらを使うべきか

Double 括弧とng-bindディレクティブはどちらも同じレンダリング結果を生成するため、どちらを選ぶかは恣意的に見えるかもしれません。しかし、そうではありません。AngularJSの読み込みが完了するまでの間、両者は異なる動作をし、その違いはページを使用するユーザーにも認識されます。

側面 {{ expression }} ng-bind
で書かれている 要素の内容 要素属性
AngularJSがロードされる前に 生のブレースが画面に映る 何も表示されない
読みやすさ 高い — 値はインラインです 低い値 — 値は属性に隠されています
要素ごとに複数の値 はい いいえ、綴じ方は1つだけです
一度限りの製本 はい、と {{::value}} はい、と ng-bind="::value"

生の波括弧が一瞬表示される現象は、補間されていないコンテンツのフラッシュと呼ばれ、ブラウザがAngularJSによるコンパイル前にマークアップをレンダリングするために発生します。ファーストビューに表示されるコンテンツには、ng-bindを使用するか、ng-cloakディレクティブを追加してください。それ以外の場所、特に1つの要素内に複数の値が含まれる場合は、波括弧の方がより明確で読みやすい選択肢となります。

式と$evalの違い

その $eval 関数はコントローラ内部から式を評価します。式はビュー内で評価されますが、 $eval コントローラコード内で評価されます。

この例では、 $eval 2つの数値を加算し、その結果をスコープオブジェクトに格納して、ビューが表示できるようにする。

式と$evalの違い

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>
</head>
<body>

<script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>

<div ng-app="sampleApp" ng-controller="AngularController">
    <h1>Guru99 Global Event</h1>
    {{value}}
</div>

<script>
    var sampleApp = angular.module('sampleApp', []);
    sampleApp.controller('AngularController', function($scope) {
        $scope.a = 1;
        $scope.b = 1;

        $scope.value = $scope.$eval('a+b');
    });
</script>

</body>
</html>

Code 説明:

  1. 2 つのスコープ変数、 a (NAIST) と bそれぞれが値1を保持します。
  2. $scope.$eval それらの加算を評価し、結果をスコープ変数に代入する。 value.
  3. すると、ビューに value.

出力:

式と$evalの違い

出力には、内部で評価された式が表示されます。 コントローラ2つのスコープ変数の合計がビューに送信され、ビューに表示されます。

よくあるご質問

式の前にコロンを2つ付けると、 {{::name}}値が解決されると、監視を停止します。これにより、ウォッチャーが削除され、静的バインディングが多いページでのダイジェストコストが削減されます。

$eval 文字列を即座に評価します スコープ. $parse 繰り返し評価可能な再利用可能な関数を返します。 $interpolate 単一の式ではなく、中括弧を含むテンプレート文字列全体を処理します。

主に。 AI ツールは中括弧を保持し、フィルターをパイプとして書き換えますが、ng-init 変数には Angular に相当するものがなく、手動でコンポーネント クラスに移動する必要があります。

AIツールは、バインディング内の関数呼び出しをテンプレートからスキャンし、ダイジェストサイクルごとに再実行される関数呼び出しを検出し、結果をスコープ上にキャッシュするか、ワンタイムバインディングに切り替えるかのいずれかを提案します。

AngularJSの評価は意図的に寛容です。プロパティが欠落している場合はundefinedとなり、空の文字列として表示されるため、値が空の場合は通常、実行時エラーではなくプロパティパスの入力ミスを意味します。