0

とのアニメーションバージョンを実装しようとしていng-showますng-hide。私はもともとを使おうとしましjQueryUI.toggle('slide', …)たが、$watch何度も発砲したため、要素がトグルインしてすぐにトグルアウトしていました(場合によっては複数回)。しかし、AngularJSのgithubの問題で、それが$ watchの意図した動作(ダーティチェック)であることがわかりました。

だから私は、この小さな効果を大丈夫だと思いました-あなたは気にしないでください、私は単純なトグルの代わりに明示的に表示または非表示にします:私はそれを分解して$watchの値を次のnewValueようにチェックします:

scope.$watch(condition, function myShowHideAction(newValue,oldValue) {
    if ( newValue !== oldValue ) {
        if (newValue) {
            elm.show("slide", { direction: direction }, "slow");
        } else {
            elm.hide("slide", { direction: direction }, "slow");
        }
    }
}

それを起動し、私は何を見ますか?トグル!

いくつかのコンソールログを入力した後、$ watchのループ中に条件の値が変更されていることがわかりました(これは1回ではなく6回繰り返されますが、ここにもそこにもありません)。ただし、実際のスコープパラメータの値は、のように途中で変更されることはありません(変更されるべきではありません)newValue

一体何が起こっているのですか?

プランカー

4

1 に答える 1

1

これが発生する理由は、すべてのインフォボックスが同じスコープを共有しているためです。mySlideディレクティブリンク関数にステートメントを配置するconsole.log(scope)と、同じスコープで複数回作成されていることがわかります。したがって、同じスコープ内に同じ条件の複数の時計があります。

あなたのコードを理解するのは簡単ではありませんが、問題は87行目のmy-map.js内にあるようです。実行する代わりに、その情報ボックスの分離スコープを作成する$compile(elm.contents())(scope);必要があります。$compile(elm.contents())(scope.$new());

于 2013-02-22T07:30:14.967 に答える