2014-01-15 83 views
0

我對Angular應用程序有點問題。基本上我想操縱應用程序本身之外的範圍。如果我在控制檯輸入:從外部函數訪問角度範圍加載

$scope = angular.element($('.lead-system')).scope()

我可以用$scope$apply,這一切工作正常。然而,當我用這個在軌的CoffeeScript文件:

angular.element(document).ready -> 
    console.log angular.element($('.lead-system')).scope() 

它記錄undefined,當然我不能用$apply這一點。

這是怎麼回事?我加載順序的JS文件:

app.js < - 主角度應用程序初始化

pending.js.coffee < - 上面

lead_controller.js <列出的文件 - 我的範圍控制器m試圖訪問

+1

角度準備並不意味着第一個摘要循環已準備就緒或您的控制器已實例化。如果控制器或指令被實例化,則$ scope是可用的。順便說一句:這實際上不是你應該如何使用angular:angular.element($('。lead-system'))。scope()。爲什麼這是必要的? – michael

+0

這就是我正在尋找的東西:當該範圍可用時使用的ready事件。至於原因:因爲頁面的另一部分需要在點擊時將產品添加到範圍變量。這是一個獨立的應用程序,但是當你點擊一個按鈕時,頁面的其他各個部分需要用初始數據加載它。 – andy

回答

1

將其包裝在$超時,只是爲了檢查它是否會工作。這應該告訴你,如果這可以通過不同的時間來解決,或給你進一步探索的想法。

我的建議雖然是在控制器中觸發一個事件(在你的情況下發射/廣播,甚至是任意的外部事物),並對該事件作出響應來操作範圍。爲了方便起見,您甚至可以將範圍作爲參數傳遞。

+0

你讀了我的想法,我只是將它包裝在一個超時500ms,它完美的作品:)然而,這不是最好的方式來做到這一點,所以我會看看如何觸發控制器中的事件 – andy

+0

我將如何發出一個來自控制器的事件,我可以在jQuery中偵聽?我試過'$(document).trigger('leadControllerLoaded')'但'$(document).on('leadControllerLoadded')'不起作用 – andy

+0

我不使用jqyery,所以不能在這裏幫忙。先嚐試簡單的事情。在窗口上設置一個函數,它將完成你的東西傳入對象。然後使用$ window從角度控制器調用它。當這個簡單的事情起作用時,你可以繼續找出與之相關的任何建築風格。 – stride