2013-02-12 36 views
15

我是AngularJS的新手,我正嘗試構建一個簡單的小應用。我使用$resource獲取應用的JSON數據,並且這些數據在多個視圖/路線中應該是相同的。但是,當我轉到新路線時,JSON數據(存儲爲$scope.data)不再可用於新視圖。我能做些什麼來將這些數據傳遞到新的視圖,而不需要另一次獲取? (教程的電話目錄應用程序重新從我可以告訴每次重新獲取此數據。)如何通過AngularJS路由保存數據?

從我所瞭解的,$rootScope可以做到這一點,但它似乎一般皺眉。我道歉,如果這沒有多大意義;我在這裏深陷潛水。

+0

[Angularjs,路由之間的範圍傳遞]的可能重複(http://stackoverflow.com/questions/13882077/angularjs-passing-scope-between-routes) – 2014-10-24 11:58:32

回答

17

使用服務來存儲數據。將該服務注入到需要訪問此數據的每個控制器中。每次創建並執行控制器(因爲您切換到另一個視圖/路由),它都可以向服務請求數據。如果服務還沒有數據,它可以向服務器發出請求並向控制器返回一個承諾(請參閱下面的說明)。如果服務有數據,它可以立即將其返回給控制器。

又見Processing $http response in service

注意,服務是單身,不像控制器。

另一種變體:創建服務時,它可以獲取數據本身,然後將其存儲以備後用。控制器可以比$監視服務上的屬性或功能。有關此方法的示例,請參閱How do I store a current user context in Angular?

+0

感謝您的徹底響應!不幸的是,我仍然無法使它工作(我正在嘗試第一種方法,這對我來說似乎更加自然)。我有'$ routeProvider'定義了兩個路由,現在每個映射到同一個控制器。控制器調用'service.async()。then(...)',服務的'async'方法返回由'http.get('/ data.json')'定義的承諾。每次我在應用內導航到一個新路由時,都會創建一個到'data.json'的新HTTP請求。任何想法將不勝感激。 – JacobEvelyn 2013-02-12 04:56:45

+0

@ConstableJoe,嘗試轉動[$ http caching](http://stackoverflow.com/questions/14117653/how-to-cache-an-http-get-service-in-angularjs)。我應該在我的答案中提到這一點。 – 2013-02-12 05:07:47