問題タブ [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 - $scope.$apply after $scope.$on
ここで概説した$broadcast パターンをコントローラーに使用して、サービスの状態をリッスンします。
たとえば、ここではサービスのビジー/アンビジー状態をリッスンして、マウス カーソルを設定します。
HTML
CSS:
これの問題は、カーソルがすぐに変化しないことです。通常、マウスを動かす必要があり$digest
ます。カーソルが変化する前に、サイクルをトリガーすると思います。
私はそれを修正することができます
しかし、これはスローされます:
エラー。
これに対処する最善の方法は何ですか?
編集: これは動作中の JSFiddle です: http://jsfiddle.net/HB7LU/23512/
この問題は、Angular 以外のタイムアウト/非同期メソッドの使用に関係しているようです。(つまり、 を使用すると問題は発生しませんが、 ;$timeout
を使用すると発生します。setTimeout
javascript - Angular ng-show が一貫して機能しない
問題
Adobe Creative SDK を Angular アプリに統合しようとしています。エディターは、ボタンをクリックしてフォト ビューアー モーダルから初期化されます。これにより、以下の関数がトリガーされます。エディターが初期化されると、onReady
コールバックによってフォト ビューアーの要素が非表示になり、エディターがモーダルに追加されます。この部分はうまく機能します。
私のモーダルDOMでは、エディターが開いているかどうかに応じて、表示または非表示にしたい要素を使用しようng-show="editorOpen"
としています。ng-show="!editorOpen"
初めてトリガーすると、期待どおり$scope.editPhoto
にng-show
動作します。ただし、エディターを閉じるとng-show
、DOM の更新に失敗します。エディターは非表示になりますが、非表示のフォト ビューアー要素は非表示のままです。
私は Angular のダイジェスト サイクルの専門家ではありませんが、私の調査からわかったことから、ダイジェスト サイクル中にhidePreview()
および関数が呼び出され、への変更が登録されないことが問題であると考えています。showPreview()
ng-show
$scope.editorOpen
エディターを閉じてng-show
DOM の更新に失敗した場合でも、アプリ内でダイジェスト サイクルをトリガーする別のアクションを実行することで手動でトリガーできます。たとえば、左右の矢印キーを使用して次の写真に移動しようとするなどです。ビューアモーダル。
しかし、ここからさらに奇妙になります。エディターを閉じて手動でダイジェストをトリガーすると、すべてが正常に見えます。エディターをもう一度開くと、ng-show
先ほど説明した方法を使用してダイジェストを手動でトリガーしようとしても、完全に機能しなくなります。
私が試した解決策
問題を解決するためにこのディスカッションで提供されたすべての解決策を含め、可能な修正をいくつか試しましたが、すべて失敗しました。
- ダイジェストをトリガーする必要があるため、関数でラップ
$scope.editorOpen = true
してみました。遅延を0msと10msに設定してみました。どちらも失敗しました。$scope.editorOpen = false
$timeout
- 以下のコードにあるおよび関数の代わりに、
$scope.toggleEditor
トグルするスコープ関数を作成し、$scope.editorOpen
それを Adobe Creative SDK 画像エディターのonSave
、onReady
、およびコールバックに渡しました。それも失敗しました。onClose
showPreview()
hidePreview()
$scope.editPhoto
関数全体を関数にラップしてみました$timeout
。また、失敗しました。- 関数内
$scope.$apply()
だけでなく、手動で呼び出すというより直接的なアプローチを試みました。これは通常、エラーが発生する前に一度だけ機能し、悪い習慣のような匂いがします。$scope.$digest()
showPreview()
hidePreview()
$rootScope:inprog
- 最後に、もっと必死になっ
if (!$scope.$$phase) $scope.$apply()
て、ひどい習慣にもかかわらず、問題が解決するかどうかを確認するために を試しました。当然のことながら、#4 と同様に失敗しました。
コード
私のコントローラーには、次の機能があります。
私の見解では、モーダルにある次の div があります。
javascript - AngularJS - $watch が期待どおりに動作しない
ここに私のapp.jsがあります
3秒後、次のように表示されると思いました:
私のコンソールで。
代わりに、次のように表示されます。
次のように、index.html で init() 関数を呼び出します。
この出力が表示されるのはなぜですか?
angularjs - 双方向バインディングが更新されるのはどの部分ですか?
SortBy モデルのコントローラーに次の配列があるとします。
ビューでは、2 つの場所で双方向バインディングを使用しました。1 つ<select ng-model="SortBy">
は式バインディングです。 <div>{{SortBy}}</div>
モデルの更新が式バインディング部分を更新することは確かに知っていますが、選択したオプションを再更新します<select>
か?
angularjs - ngOptions は新しい値で正常に更新されますが、ng-model はデータバインディングではありません
次のような を使用して入力された 2 つの選択フォームがありますng-options
。
$http
最初のドロップダウンが選択されると、次のように 2 番目のドロップダウンを設定するための呼び出しがトリガーされます。
"brands"
これにより、ドロップダウンに新しい値が正しく入力されます。しかし、ブランドを選びに行くとng-model
変わらない。テストすると、null 値が返されます。私はサイクルで$scope.$apply
作業することを検討しまし$digest
たが、それは私の問題ではないようです ("brands"
ドロップダウンは正常に更新されたデータを取得しますが、データを送信しません)。
何が起こっているのか、それを修正する方法を知っている人はいますか?