0

最初にここにプランクがあります:http://plnkr.co/edit/2gD0AB。このプランクは発火しないため正しく機能していないようです$scope.$on("$viewContentLoaded")が、私のマシンでは問題なく機能します。アイデアを理解していただければ幸いです。

私がやろうとしているのは、フィールドオブジェクトを適切なドロップ可能な領域にドラッグするときに、$scope.fieldsフィールドオブジェクトをからに移動することです。$scope.groupFields = [], $scope.listFields = [], $scope.dataFields = []私は、jQueryUIとjQueryUIタッチパンチを使用してこれを行うマネージャーを持っています(モバイルセーフにするため)。

フィールドボックスから空のボックスの1つに要素をドラッグすると、フィールド要素がそれらを残した場所にぶら下がっている以外に、画面上で何も起こらないことに気付くでしょう。ただしconsole.log($scope.fields)dropイベントリスナーでを実行すると、すべてのフィールドオブジェクトが各フィールドボックス内に正しく設定されていることがわかります。

[要素の追加]ボタンをクリックすると、トリガーするだけconsole.log($scope.groupFields);で、最初に意図したように、突然すべての要素が対応するボックスに正しく表示されます。

私の頭脳を引き出し、しばらくインターネットを検索した後、関数の後にイベント$scope.$apply()で呼び出されたが、実際に私の問題を修正していることがわかりました。dropmoveField

そして、その理由がわかりません。digestコントローラで行っていることに基づいて、ビューをすでに実行および更新しているべきではありませんか?

ありがとう!

4

1 に答える 1

0

これらのjQuerydropイベントを処理するコードがコントローラー内にあるからといって、angularjsスコープ/ワードで実行されるわけではありません。これらの変更を有効にするには、angularjsアプリにモデルのダーティチェックを強制する必要があります。$apply()これは、または$digest()メソッドを呼び出すことで実現できます。$scopeプロパティを変更するjQueryイベントを処理した後、timeoutまたは(または)の後に、常にこれらのメソッドの1つを呼び出す必要がありますinterval

于 2013-01-27T02:09:48.983 に答える