12

AngularJSアプリで非常に奇妙な動作が見られます。

単一の$broadcastが作成されると、(唯一の)レシーバーが2回起動されます。

アプリ全体への影響は、レシーバーが1回だけ起動されたかのようになります。(つまり、アイテムの1つだけがバスケットに追加されます)。

$ broadcastを2回起動すると(つまり、$ broadcastを起動するボタンを2回クリックすると)、レシーバーが4回実行されますが、2つのアイテムがバスケットに正しく追加されます。

ここでスプレッドシートのような再計算が行われていますか?$scope関数は'plain'javascript変数に影響を与える必要はありませんか?

私の問題は、を追加してalert2回表示されていることです。


私はこれをデバッグするためにさらにいくつかの作業を行いました:

放送を受信した回数をカウントするカウンターを追加しました。

スコープ(ドルなし)がグローバルである場合、2倍の結果が得られます。そのスコープがCtlr関数に対してローカルである場合、2倍にならない結果が得られます。

どういうわけか、コントローラーの2つのインスタンスを作成できますか?

ファイアバグから、コントローラーから行われた$ http ajaxリクエストは1回しか発生しないことがわかります。そのため、私は非常に混乱しています。

4

1 に答える 1

23

まず、コントローラーの本体にconsole.logステートメントを追加して、初期化された回数を確認します。コントローラーは、頻繁に作成および破棄される可能性のあるDOM要素に関連付けられているため、コントローラーのライフサイクルは短くなる可能性があります。

$ routeProviderを使用している場合、「controller」プロパティの値を指定していますか?もしそうなら、「ng-controller」属性を使用して部分的に同じコントローラーも指定していますか?両方ではなく、どちらか一方を選択する必要があります。そうしないと、そのルートに移動するたびに2つのコントローラーインスタンスが作成されます。

于 2012-07-25T05:08:44.027 に答える