angularjs ng-click がエラーを黙って消す 質問する

angularjs ng-click がエラーを黙って消す 質問する

次のような ng-click がある場合: ng-click="buggy()" をクリックしても、コンソールにエラー メッセージは生成されません。

これにより、デバッグが少し難しくなります。

エラー メッセージが生成されないのはなぜですか? 何かできることはありますか?

ベストアンサー1

角度表現

実は、これは特別なことではなくng-click、デフォルトの動作です。角度のある表現

buggy()通常の JavaScript では評価されません。 で評価されます$parse

$parse式を評価し、スコープに対して実行される関数を返します。

$parse式が無効な場合にのみエラーをログに記録します。

Angular 式の評価は寛容なので、それを渡す方法が思いつきません。

なぜ表現は寛容なのでしょうか?

Angular 式が undefined や null を許容する理由は、データ バインディングに関係しています。バインドされた変数は、DOM にコンパイルされるときに最初は undefined または null である可能性があります。非常にわかりやすい例の 1 つは、バインドされた変数が promise に依存している場合です。Angular チームは、その promise が解決されるまでエラー メッセージをポップアップ表示するのではなく、何もせずに続行する方がよいと判断しました。

からAngular の表現ガイド:

a が未定義の場合、例外をスローするよりも何も表示しない方が理にかなっています (おそらくサーバーの応答を待っているので、すぐに定義されるでしょう)。式の評価が寛容でなければ、コードを乱雑にするバインディングを記述する必要があります。たとえば、次のようになります: {{((a||{}).b||{}).c}}

参照:https://groups.google.com/forum/m/#!topic/angular/HRVOUKEHLFw


角度表現:

式はJavaScriptのようなコードスニペットで、通常は{{expression}}などのバインディングに配置されます。式は$パースサービス。式は、よりユーザーフレンドリーな形式を作成するために、フィルターを使用して後処理されることがよくあります。

Angular 式と JS 式

Angular ビュー式を JavaScript 式として考えたくなるかもしれません。しかし、Angular は式を評価するために JavaScript eval() を使用しないため、これは完全に正しいわけではありません。Angular 式は、次の違いを持つ JavaScript 式として考えることができます。

  • 属性評価: すべてのプロパティの評価は、評価を実行するスコープに対して行われます。これは、式がグローバル ウィンドウに対して評価される JavaScript とは異なります。

  • 寛容: 式の評価では、未定義のプロパティを評価しようとすると ReferenceError または TypeError が生成される可能性がある JavaScript とは異なり、未定義および null が許容されます。

  • 制御フローステートメントなし: Angular 式では、条件文、ループ、スローはいずれも実行できません。

おすすめ記事