問題タブ [angularjs-digest]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angularjs - promise が解決されたときに Angular ダイジェストが実行されていない
私のAngularアプリケーションには、スコープが分離されたディレクティブがあります。ディレクティブはそのスコープで文字列パラメーターを取得します。この値は非同期プロセスで親スコープによって初期化される可能性があるため、値を使用する準備ができたときに親によって解決される promise も取得します。
奇妙なこと: プロミスが解決されたとき、ディレクティブのスコープの値はまだ定義されていませんが、親コントローラーには値があります。
私が経験したことの例については、このプランカーを参照してください: https://plnkr.co/edit/WLILKaO95xWwU2RF29oX?p= preview
コントローラーで:
ディレクティブで:
重要な注意: コードの 'alert' 行を $timeout のブロックでラップすると、scope.value は正しい値になります。約束が解決されたときに角度がダイジェストを実行していないようです。
何か案は?
angularjs - ng-repeat を使用した ng-map の custom-marker で $digest ループ エラーが発生するが、正常に動作している
現在、これを使用して、マップ上にカスタム マーカーを取得しています。
plunkerではエラーなしで動作しましたが、自分のサイトでは動作しませんでした (同じスクリプト src リンクを使用しているにもかかわらず)
自分のページでは ng-repeat は機能しますが、$digest ループについて知らせる 2 つの非常に長いエラーが表示されます
これは私のリストです:
そして、これはHTMLです:
上記はエラーにはなりませんが、
します。また、リストにアイテムを追加するたびに 2 つの余分なエラーが発生しますが、それでも正常に動作します。
plunker では機能するが、自分のサイトでは機能しない理由がわかりません。同じバージョンを使用して、ASP.NET 5 を使用してサービスを提供しています。私自身のサイトでも、ng-animate、ng-resource、および角度に関連しない一連のものを使用していますが、それは問題ではありません。(私は願います)
必要に応じて、私のコントローラーはこれらを使用しています:
アプリモジュールはこれを使用しています:
javascript - $scope.showList の状態変更時に $scope.getList() が呼び出されるのはなぜですか?
以下のコードでは、
$scope.getList()
$scope.showList
チェックまたはチェック解除による変更時に呼び出されます。ここで$scope.showList
、として使用されます。
$scope.getList()
の状態が変化したときに呼び出されるのはなぜ$scope.showList
ですか?
同様のコード、
disableButton
状態が変化しているため、双方向バインディングのためにボタンが無効または有効になるため、私には理にかなっています。
javascript - ng-repeat 内の Angularjs 関数の呼び出し回数が多すぎる
コントローラーには、console.log をスタンプするだけの非常に簡単な機能があります。関数を使用してボタンを調整する必要がありますが、ng-repeat 内でコントローラーがすべてを何度も繰り返します! それは正常ですか?これを回避することは可能ですか?ありがとう。ここの例http://plnkr.co/edit/sME67gQEZQSLI9FOwEAG?p=preview
相対コード:
JavaScript:
angularjs - 関数式が複数回実行されるのを回避する角度
のような乗算関数がありcount()
getTotal()
ます。何かが変更された場合、これらすべての計算関数を実行する必要がありますcart/object
。現在、私はのようなビューでそれらを使用しています{{count()}}
。したがって、これらの関数はすべて複数回実行されています。これらの関数は、ダーティチェックのために複数回呼び出されると思います。これは正しいです?
今私は$watch
関数について読みましたが、パフォーマンスの問題のため、それを避けるようにしてください。とにかく私はそれをテストしたいと思っていまし$watched
たcart
。ログに記録されるのは1 回だけであることがわかったので、そこにあるすべての計算関数を呼び出して、計算結果にバインドする$watch
方が高速ではないでしょうか?cart
私はそれが同じ動作をするだろうと思っていたので、少し混乱しています。$watch
もダイジェスト ループを通過するためです。
似たような質問がすでにたくさんあることは知っていますが、誰かが私のケースについてそれほど難しくない英語で直接説明してくれると、ずっと簡単になります.
例: パフォーマンスが優れているのはどれですか? なぜ?両方の亜種が消化サイクルを通過しますか? では、なぜバリアント 2 は 10 回ログに記録し、バリアント 1 は 1 回しかログに記録しないのでしょうか?
バリアント 1
バリアント 2
私自身の質問に答えようとしていますが、それが正しいかどうかはわかりません。
バリアント 1では、もう 1 つのウォッチャーがありますが、関数の代わりに値を監視するだけで、カートを で手動で監視するため、もう 1 つ監視し$watch
ます。しかし、ウォッチャーの計算はそれほど重くありません。
バリアント 2関数が返す値を監視しているため、関数は同じ値を複数回計算する必要があり、魔女はより重いです。各ダイジェスト サイクルで UI が更新されます
これは正しいです?では、バリアント 1 の方がパフォーマンスが優れているのでしょうか?
javascript - $location.path('mypath') は、ダイジェスト フェーズ内であっても機能しません
次のようなコードがあります。
両方の印刷行が '$digest' で返されます。これは、ダイジェスト サイクルにいることを意味します ... それでも、 $location.path 呼び出しは単に機能していません。具体的には、ブラウザの URL ブラウザは変更されません。実際、これは機能する唯一の部分です。
また、呼び出しの後、location.path() は適切な URL を返します。失敗しているのは、ブラウザーに伝達してページを自動的にルーティングする機能です。$route.reload() を使用してルーティングを強制することはできますが (コメントで提案されているように)、ブラウザーの URL を変更することはできません。これにより、ページが URL とページの状態が悪い場所に置かれます。一致しない。
window.location.href を直接使用することで、これを回避できましたが、さまざまな理由から、これは優れた解決策ではありません。
$location.path が angular スコープの外で呼び出されているために機能しないことはたくさんあります (したがって、適用で強制する必要があります) が、ダイジェスト サイクルにあると思われる場合のアイデアはありますか?
javascript - 単体テストでダイジェスト サイクルを実行した後にスコープの値を変更できない
単体テストに合格できません。文字列が変更されることを期待していますが、元の説明に戻り続けています。
私の単体テストでは、属性の変更を 2 つの方法でモックすることができました。$属性を変更しています
属性が監視され、そのようにスコープに追加されます...
globalAlertはディレクティブの名前で、description は変更する属性です。
単体テスト内で、仕様を次のように設定しています
説明は、期待どおりに元の文字列値に設定されたままです。ダイジェストがヒットし、デバッガーの JavaScript 関数に変更が表示されます。
**私の単体テストでのダイジェストの後に、
これを修正するための助けをいただければ幸いです