我有我的UI的路由器設置下面的代碼角UI - 過渡到同一狀態更新URL,但後退按鈕破
.state('contacts.list', {
url: "",
templateUrl: "templates/contactsList.tpl.html",
controller: "ContactsListCtrl" contactsFilter: "all"
}
})
.state('contacts.list.paginated', {
url: "/page/{pageNumber}",
templateUrl: "templates/contactsList.tpl.html",
controller: "ContactsListCtrl"
})
然後,我有一個角UI分頁控制調用該函數時頁面發生變化
$scope.pageChanged = function(pageNumber){
$state.go("contacts.list.paginated", {pageNumber: pageNumber});
$scope.listParams.offset = (pageNumber -1) * $scope.itemsPerPage;
updateList(); // Reloads the data for the new page from the server */
};
這類作品。當您從第1頁到第2頁單擊時,它會從服務器獲取下一頁數據,將其放在頁面上並將地址欄中的URL更改爲/ 2。此外,大概是因爲這兩個狀態共享相同的控制器,控制器不會重新執行,這是我想要的,因爲我希望它繼續執行我的$ scope.pageChanged()函數。
到目前爲止這麼好。 URL更新,數據更新。
問題是,當我點擊後退按鈕時,沒有任何反應。如果按下頁面2,3和4,然後點擊後退按鈕,則URL會按預期改回到/ page3,但控制器代碼不會執行,分頁控件不會更新,也不會向服務器發出調用以獲取正確的數據。另外,如果您已經在此視圖中,在地址欄中手動輸入/ page/2或/ page/3將導致無法執行代碼,這可能是因爲它只是改變了參數。
我需要找到一種方法,讓您在使用後退/前進按鈕時重新執行控制器代碼,或者偵聽狀態/位置更改,以便在發生此情況時可以刷新數據(但是當你第一次點擊頁面時不會運行兩次)。
我已經搜遍了SO和網絡的其他部分,但無法找到任何線索。
當狀態每次改變時,控制器都不會被重新執行,因爲它只是參數正在改變,而且,如果我擺脫pageChanged功能,當用戶單擊頁碼按鈕時根本不會發生任何事情。 – jonhobbs
你確定嗎?我認爲你需要爲每條路線使用單獨的控制器。 –
這不會幫助,因爲我不能有一個不同的控制器的頁面/ 2頁/ 3頁/ 4直到第/ 1000 – jonhobbs