1

サービスから返された式に基づいて小計を動的に表示する必要があります。以下のサンプル アイテム構造を参照してください。プロパティ値がテキスト入力にバインドされています。入力値のいずれかが変更されると、ラベルの式に従って小計が更新されます。これを行う最善の方法は何ですか?

注: フィールド名/値のペアの数は異なる場合があります。

$scope.item = [
  {fieldName: "fname1", value: 2},
  {fieldName: "fname2", value: 5},
  {fieldName: "fname3", value: 4},
  {fieldName: "fname4", value: 6},
  {fieldName: "fname5", value: 3},
  {fieldName: "subTotal1", expression: "['fname1'] + ['fname2'] +['fname3'] +['fname4'] +['fname5'] +"}
]

4

3 に答える 3

0

プロパティに基づいて値を計算する必要がある場合は、expresion最初にフィールド インジケータを式の数学演算子と一緒に tokanize する必要があります。このプロセスの複雑さは、式で許可する数学的印象のタイプによって異なります。

例えば:

[fName1] + [fName2] - [fName3]    // is a simple expression
[fName1] * ([fName2] + [fName3])  // is complex than that

次に、これらのトークンを配列と比較して、これらのトークンから集計値を計算する必要があります。

--

式がユーザーからのものである場合はお勧めしませんが、これらすべての fName 変数を内部に持つプライベート スコープ オブジェクトを作成し、eval抽象化によってそのコンテキストに対して関数を使用するという別の方法があります。

この回答でこの方法についてのアイデアを得ることができます。

于 2016-02-04T12:27:59.567 に答える
0

あなたの問題を解決するためにフィドルを書きました。改善できますが、現時点では時間がありません。あなたはそれを自分で行うことができます。

それはあなたが投稿したモデルに基づいています:

  $scope.item = [
    {fieldName: "fname1", value: 2},
    {fieldName: "fname2", value: 5},
    {fieldName: "fname3", value: 4},
    {fieldName: "fname4", value: 6},
    {fieldName: "fname5", value: 3},
    {fieldName: "subTotal1", expression: "['fname1'] + ['fname2'] +['fname3'] +['fname4'] +['fname5'] +"}
  ]

バインディングを機能させるには、プロパティが変更されたときに再評価される関数にすべてを入れることができます。

ここでそれをチェックしてください

于 2016-02-04T12:33:28.443 に答える