2014-02-12 73 views
0

我有「搜索」按鈕,它從靜態服務返回對象的數組。我使用ng-repeat將這些值渲染到表格中。現在點擊Colums頁面,使用$routeprovider將詳細信息導航到下一頁。

我的問題是:當我點擊瀏覽器後退按鈕時,如何保留表中的值?

這是我的app.js:

myApp.config(['$routeProvider', function($routeProvider) { 
    $routeProvider 
    .when('/displayValues', { 
     templateUrl: 'DisplayValues.html', 
     controller: 'DisplayValuesController' 
    }) 
    .when('/showDetails/:inputNumber', { 
     templateUrl: 'ShowDetails.html', 
     controller: 'DetailsController' 
    }) 
    .otherwise({ 
     redirectTo: '/displayValues' 
    }); 
}]); 
+0

通過保留,你的意思是不會導致另一個http請求?如果DisplayValuesController正在使用服務,那麼該服務可以使用內存中緩存 –

+0

是的,請問我是否知道內存緩存中的含義?我只是想讓桌子也像刷新一樣。 – user3299984

+0

謝謝大家的回覆,使用$ cachefactory並且現在工作:) – user3299984

回答

0

閱讀$routeProviderreloadOnSearch財產。如果設置爲false,則查詢字符串值的更改不會導致控制器重新初始化,因此它們將保持狀態(搜索結果)。

因此,如果您的導航到詳細信息頁面應使用查詢字符串導航。要知道在這種情況下更改視圖,您必須訂閱$routeUpdate事件。請參閱$ route文檔。

另一種方式是將搜索結果緩存到服務中,並在返回到列表頁面時重新綁定。

0

您可以通過服務保存狀態,這些服務是AngularJ中的單例服務,可以像其他所有服務一樣通過依賴注入來訪問。

你可以做這樣簡單的東西(這是不理想的,只是一個例子):

angular.module('myApp', []).service('valueService', function() { 
    var currentValues; 

    return{ 
     setValues: function(newValues) { 
     currentValues = newValues; 
     }, 
     getValues: function() { 
     return currentValues; 
     } 
    } 
}); 

最初,你的控制器可以調用服務的數據,如果返回值是不確定的,做一個XHR請求到您的服務器並將值存儲在服務中。

您需要額外的邏輯和更改,但基本思路是將結果緩存到服務中並從您的控制器中檢索。

相關問題