Angular Dart チュートリアルの主な実行例は、レシピ ブック アプリです。フィルターとサービスに関する第 5 章の最後にある演習では、"レシピに記載されている [各材料の] すべての量を乗算する [カスタム] フィルターを作成し、"ユーザーが 2 倍、3 倍、または"レシピを 4 倍にします。」たとえば、「小麦粉 1/2 カップ」の材料は、2 倍にすると「小麦粉 1 カップ」になります。
私はそのようなカスタム フィルターを作成しました: s のリスト( aと aIngredient
で構成される) を受け取り、新しい s の新しいリスト(数量を増やしたもの) を返しますが、次のエラーが発生します。quantity
description
Ingredient
5 $digest() iterations reached. Aborting!
私の質問は: AngularDart カスタム フィルターcall()
メソッドの必須および/または許可された動作は何ですか? たとえば、入力リストから要素を削除 (つまり、フィルター) することは明らかに許可されていますが、新しい要素を追加したり、要素を置き換えたりすることはできますか? Dart angular.core NgFilterのドキュメントには、単に「フィルターは呼び出しメソッドを持つクラスである」と書かれています。詳細は見つかりませんでした。
この AngularJS postへの回答から推定すると、(最終的には?) shouldを繰り返し呼び出してもcall()
「同じ結果」が得られるように思われます。もしそうなら、これは合理的な制約になります。
「同じ結果」をもたらすことは、べき等である必要があることを意味する可能性call()
がありますが、Dart の場合、そのようなべき等性は、 (オブジェクトの同一性) ではなく (オブジェクトの等価性)に関連する必要があります。問題を説明するために、次の小さな例を使用していくつかのテストを実行しました。==
identical()
- main.dart
import 'package:angular/angular.dart';
class A { }
@NgFilter(name:'myFilter') class MutatingCustomFilter {
final A _a = new A();
call(List list) => new List.from(list)..add(_a); // runs ok.
// call(List list) => new List.from(list)..add(new A()); // gives error
}
class MyAppModule extends Module {
MyAppModule() { type(MutatingCustomFilter); }
}
main() => ngBootstrap(module: new MyAppModule());
- index.html の抜粋
<ul>
<li ng-repeat="x in [1,2,3] | myFilter">{{x}}</li>
</ul>
体を変えるclass A
と
@override bool operator==(other) => true;
@override int get hashCode => 1;
これにより、すべてのインスタンスがA
見なされますが、 main.dart==
の 2 番目の実装 ( を含むもの) では、(別のものではありますが) それでもエラーが発生します。call()
add(new A())
カスタム フィルターを使用せずにチュートリアルの演習を解決する方法はわかりますが、要求どおりに機能するフィルターを見つけるという課題をあきらめないようにしています。私は Angular を初めて使用するので、AngularDart を使用することにしました。そのため、 のさまざまなフレーバーの効果を説明しcall()
たり、 の予想される動作に関するドキュメントを見つけたりするのに役立ちますcall()
(または、そのようなカスタム フィルターが単純にできないと思われる場合はお知らせください)。書いてください!) よろしくお願いします。