2016-06-17 1 views
0

AngularのダイジェストサイクルでjQueryを使用することに問題があります。

コンテンツを読み込むためにng-repeat =を使用しています。 ($ compileを使った)コンテンツは、2つの子divといくつかの孫要素を持つdivになります。 ngのリピートのためarraryをロードした後、私はそうのようにjQueryのchildren.each()を使用したい:

callBack = function(index) { 
    var objParent = $('#' + $scope.panes[index].windID); //entire window 
    var objChild = []; 
    //objChild[0] = title bar 
    //objChild[1] = contentpane 
    objParent.children().each(function(i){ 
     objChild[i] = $(this); 
    }); 
    //more code 
} 

問題は、私の開いているウィンドウの方法は、より多くの機能を備えた大規模だと、何とか角度のダイジェストが仕事を始めたということです異なっている。私の最大の/復元/最小化メソッドとボタンを追加する前に、私のコントローラが上記のコードになったとき、ウィンドウはすでにスコープで消化され、domで表示されています({display:none} jQueryのフェードインの場合)、上記のコードが機能することを意味します。

しかし、消化しようとするものが増えています。その時点までにダイジェストは完成せず、そのDOMはまだ更新されていないので、子ファインダは失敗します。私は$タイムアウトを使用しなければなりません、そして、ますます時間を増やす必要があります。私は600msほど待たなければなりません。アイコンのクリックからウィンドウの表示までに時間がかかると感じています。

今、$ timeout()の直前に$ scope。$ apply()を追加すると、ダイジェストを急いで実行するように動作します。私は時間を0msに戻すことができ、すべてが即座に機能します。しかし、進行中のエラーでダイジェストを取得します。私は$タイムアウトがダイジェストの終わりをとにかく待っていると思った?

私は$$ postDigestでもさまざまな方法を試しましたが、うまくいくように見えるのは、$ applyを強制してエンドユーザが決して見ることも実際に気にすることもない進行中のエラーそれはすべて働きます。それは私にとってはあまり問題にはなりませんが、私のウィンドウを開いたり閉じたりすると、進行中のダイジェストエラーがコンソールで増える可能性があるので、私はバグです。

はここで少し古いバージョンへのリンクです:アプリは角よりもjQueryのですが、私はちょうどそれは、HTTPモジュールだと、それは簡単に私の窓の配列をプッシュし、スプライスにするためにアンギュラ使用していAkadineWebOS

とng-repeatの魔法がdomを処理させます。 jQueryは、ドラッグ、サイズ変更、フェードイン/アウト、開いたウィンドウの中央揃え、その他のほとんどの機能を使用して、すべての重い持ち上げを行います。

ここに私の質問があります:誰かが、私がAngularのダイジェストがうまくいかないかについて私が見逃していることを私に説明してもらえますか?

+0

コントローラ内部では行わないでください。これを指示の中で行う方が良いです。どのような種類のDOMを取得しようとしているのか、どのDOMを構築しようとしているのかをもう少し理解できれば、リンク機能を提案することができます。 – Makoto

+0

このようにjQueryに戻って達成しようとしているのは何ですか?あなたの質問には詳細な説明がなく、実際には抽象的なプロセスがいくつか記述されていますので、あなたが経験していることを追跡するのは難しいですが、 '$ compile'メソッドとjQueryメソッドを使用していることが本当に際立ちます。 *大量の*大部分のケースでは、 '$ compile'は不要で、確かにjQueryと角度を混ぜることは、それ自身の考えを持っています..... – Claies

+0

それは角度の中の何かが非同期であるケースを記述しているかもしれません。 angleはDOMを更新することができますが、jQueryはプロセスが非同期であることを知らず、すぐにDOMにアクセスしようとしています。これは '$ digest'の問題ではありません。 – Claies

答えて

0

クレイズ氏によると、jQueryはアシックのような角度ではありません。実際には$ timeout()をsetTimeout()に変更しなければならず、基本的にjQueryのコールバックを無効にしていました。今それは素晴らしい作品です!

関連する問題