問題タブ [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.

0 投票する
0 に答える
319 参照

angularjs - $scope.$apply after $scope.$on

ここで概説した$broadcast パターンをコントローラーに使用して、サービスの状態をリッスンします。

たとえば、ここではサービスのビジー/アンビジー状態をリッスンして、マウス カーソルを設定します。

HTML

CSS:

これの問題は、カーソルがすぐに変化しないことです。通常、マウスを動かす必要があり$digestます。カーソルが変化する前に、サイクルをトリガーすると思います。

私はそれを修正することができます

しかし、これはスローされます:

エラー。

これに対処する最善の方法は何ですか?

編集: これは動作中の JSFiddle です: http://jsfiddle.net/HB7LU/23512/

この問題は、Angular 以外のタイムアウト/非同期メソッドの使用に関係しているようです。(つまり、 を使用すると問題は発生しませんが、 ;$timeoutを使用すると発生します。setTimeout

0 投票する
0 に答える
108 参照

javascript - Angular ng-show が一貫して機能しない

問題

Adobe Creative SDK を Angular アプリに統合しようとしています。エディターは、ボタンをクリックしてフォト ビューアー モーダルから初期化されます。これにより、以下の関数がトリガーされます。エディターが初期化されると、onReadyコールバックによってフォト ビューアーの要素が非表示になり、エディターがモーダルに追加されます。この部分はうまく機能します。

私のモーダルDOMでは、エディターが開いているかどうかに応じて、表示または非表示にしたい要素を使用しようng-show="editorOpen"としています。ng-show="!editorOpen"初めてトリガーすると、期待どおり$scope.editPhotong-show動作します。ただし、エディターを閉じるとng-show、DOM の更新に失敗します。エディターは非表示になりますが、非表示のフォト ビューアー要素は非表示のままです。

私は Angular のダイジェスト サイクルの専門家ではありませんが、私の調査からわかったことから、ダイジェスト サイクル中にhidePreview()および関数が呼び出され、への変更が登録されないことが問題であると考えています。showPreview()ng-show$scope.editorOpen

エディターを閉じてng-showDOM の更新に失敗した場合でも、アプリ内でダイジェスト サイクルをトリガーする別のアクションを実行することで手動でトリガーできます。たとえば、左右の矢印キーを使用して次の写真に移動しようとするなどです。ビューアモーダル。

しかし、ここからさらに奇妙になります。エディターを閉じて手動でダイジェストをトリガーすると、すべてが正常に見えます。エディターをもう一度開くと、ng-show先ほど説明した方法を使用してダイジェストを手動でトリガーしようとしても、完全に機能しなくなります。

私が試した解決策

問題を解決するためにこのディスカッションで提供されたすべての解決策を含め、可能な修正をいくつか試しましたが、すべて失敗しました。

  1. ダイジェストをトリガーする必要があるため、関数でラップ$scope.editorOpen = trueしてみました。遅延を0msと10msに設定してみました。どちらも失敗しました。$scope.editorOpen = false$timeout
  2. 以下のコードにあるおよび関数の代わりに、$scope.toggleEditorトグルするスコープ関数を作成し、$scope.editorOpenそれを Adob​​e Creative SDK 画像エディターのonSaveonReady、およびコールバックに渡しました。それも失敗しました。onCloseshowPreview()hidePreview()
  3. $scope.editPhoto関数全体を関数にラップしてみました$timeout。また、失敗しました。
  4. 関数内$scope.$apply()だけでなく、手動で呼び出すというより直接的なアプローチを試みました。これは通常、エラーが発生する前に一度だけ機能し、悪い習慣のような匂いがします。$scope.$digest()showPreview()hidePreview()$rootScope:inprog
  5. 最後に、もっと必死になっif (!$scope.$$phase) $scope.$apply()て、ひどい習慣にもかかわらず、問題が解決するかどうかを確認するために を試しました。当然のことながら、#4 と同様に失敗しました。

コード

私のコントローラーには、次の機能があります。

私の見解では、モーダルにある次の div があります。

0 投票する
1 に答える
80 参照

javascript - AngularJS - $watch が期待どおりに動作しない

ここに私のapp.jsがあります

3秒後、次のように表示されると思いました:

私のコンソールで。

代わりに、次のように表示されます。

次のように、index.html で init() 関数を呼び出します。

この出力が表示されるのはなぜですか?

0 投票する
1 に答える
42 参照

angularjs - 双方向バインディングが更新されるのはどの部分ですか?

SortBy モデルのコントローラーに次の配列があるとします。

ビューでは、2 つの場所で双方向バインディングを使用しました。1 つ<select ng-model="SortBy">は式バインディングです。 <div>{{SortBy}}</div>

モデルの更新が式バインディング部分を更新することは確かに知っていますが、選択したオプションを再更新します<select>か?

0 投票する
1 に答える
75 参照

angularjs - ngOptions は新しい値で正常に更新されますが、ng-model はデータバインディングではありません

次のような を使用して入力された 2 つの選択フォームがありますng-options

$http最初のドロップダウンが選択されると、次のように 2 番目のドロップダウンを設定するための呼び出しがトリガーされます。

"brands"これにより、ドロップダウンに新しい値が正しく入力されます。しかし、ブランドを選びに行くとng-model変わらない。テストすると、null 値が返されます。私はサイクルで$scope.$apply作業することを検討しまし$digestたが、それは私の問題ではないようです ("brands"ドロップダウンは正常に更新されたデータを取得しますが、データを送信しません)。

何が起こっているのか、それを修正する方法を知っている人はいますか?