次のような ng-click がある場合: ng-click="buggy()" をクリックしても、コンソールにエラー メッセージは生成されません。
これにより、デバッグが少し難しくなります。
エラー メッセージが生成されないのはなぜですか? 何かできることはありますか?
ベストアンサー1
角度表現
実は、これは特別なことではなくng-click
、デフォルトの動作です。角度のある表現。
buggy()
通常の JavaScript では評価されません。 で評価されます$parse
。
$parse
式を評価し、スコープに対して実行される関数を返します。
$parse
式が無効な場合にのみエラーをログに記録します。
Angular 式の評価は寛容なので、それを渡す方法が思いつきません。
なぜ表現は寛容なのでしょうか?
Angular 式が undefined や null を許容する理由は、データ バインディングに関係しています。バインドされた変数は、DOM にコンパイルされるときに最初は undefined または null である可能性があります。非常にわかりやすい例の 1 つは、バインドされた変数が promise に依存している場合です。Angular チームは、その promise が解決されるまでエラー メッセージをポップアップ表示するのではなく、何もせずに続行する方がよいと判断しました。
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 式では、条件文、ループ、スローはいずれも実行できません。