2012-07-21 36 views
11

我在我的AngularJS應用程序中看到一些非常奇怪的行爲。

當製作一個$廣播時,(僅)接收器被激發兩次。

對整個應用程序的影響就好像接收器只被解僱一次。 (即只有一件物品被添加到籃子中)。

如果您兩次觸發$廣播(即在觸發$廣播的按鈕上單擊兩次),您將收到四次接收器執行,但是正確添加了兩個項目的數量。

是否存在類似電子表格的重新計算? $ scope函數是否需要不影響'普通'javascript變量?

我的問題是,我添加了一個alert,它顯示兩次。


我做了一些更多的工作在調試這個:

我添加了計數的時間被接收的廣播數的計數器。

如果範圍(沒有美元)是全球性的,我會得到加倍的結果。如果它的範圍是Ctlr函數的本地範圍,那麼我得到一個非加倍的結果。

我可以以某種方式創建我的控制器的兩個實例嗎?

我可以從firebug看到$ http ajax從控制器發出的請求只發生一次,所以我很困惑。

+1

如果您還沒有嘗試過,請檢查AngularJS Batarang Chrome擴展程序進行故障排除(https://github.com/angular/angularjs-batarang),以防嵌套作用域引起混淆。 – Gloopy 2012-07-21 14:35:46

回答

22

我會先在控制器的主體中添加一個console.log語句,以查看它初始化了多少次。控制器的生命週期可以很短,因爲它們綁定到可以經常創建和銷燬的DOM元素。

如果您使用的是$ routeProvider,您是否指定了「控制器」屬性的值?如果是這樣,你是否也使用「ng-controller」屬性在部分中指定了相同的控制器?你真的想選擇一個或另一個,而不是兩個,否則兩個控制器實例將在您每次導航到該路線時創建。

+2

我認爲就是這樣 - 我從'ng-controller'移動到'$ routeProvider',並沒有意識到當我將頁面剪切成部分頁面時,我需要刪除'ng-controller'。我會在這個週末檢查一下,然後接受答案。 – fadedbee 2012-07-25 13:08:35

相關問題