從列表頁跳轉到詳情頁,返回列表頁時列表頁與之前的狀態相同
vue專案中有這樣一個需求,從列表頁跳轉到詳情頁,返回列表頁的時候列表頁還是之前的狀態。類似於國家司法鑑定網的列表頁
當我點選獻縣司法醫學鑑定中心,就跳轉到它的詳情頁
當點選瀏覽器的返回按鈕返回到列表頁,保留之前的狀態以。
看到網上大多數的解決方法是用keepAlive,將列表頁快取。但是我按照上面的方式還是有很多問題,並且很久都沒解決。於是另闢蹊徑,下面我要說的這個方法雖然有點笨,但功能還是可以實現的。
將這些狀態的引數存到列表頁的位址列中,比如查詢主體、所在省份、業務領域、以及搜尋框中的內容,還有如果是分頁,頁碼也要存到url中。
不多囉嗦了,下面直接上程式碼了。下面這是列表頁的路由,直接在地址中拼接引數。寫在router.js裡面
{
// qtype,searchValue,provincesValue,professionalValue,pageNum 這些是狀態引數
path: '/searchPage/:qtype?/:searchValue?/:provincesValue?/:professionalValue?/:pageNum',
name: 'searchPage',
component: () => import('@/views/searchPage')
},
下面這些寫在列表頁的vue檔案的methods裡,我只寫點選搜尋的方法,當點選查詢主體、所在省份、業務領域時同樣加上
this.$router.push({
path: '/searchPage/searchPage',
query: {
searchValue: this.searchValue, // 輸入框的值
qtype: this.qtype, // 查詢主體
provincesValue: this.provincesValue, // 所在省份
professionalValue: this.professionalValue // 業務領域
}
});
// 點選頭部輸入框的搜尋
search(value) {
this.searchValue = value;
this.getSerachResults(); // 查詢列表
// 跳轉到列表頁,其實是自己跳轉到自己的頁面,這個是為了將引數存到url中
this.$router.push({
path: '/searchPage/searchPage',
query: {
searchValue: this.searchValue, // 輸入框的值
qtype: this.qtype, // 查詢主體
provincesValue: this.provincesValue, // 所在省份
professionalValue: this.professionalValue // 業務領域
}
});
},
點選這些查詢引數的時候是不用加pageNum的,點選頁碼的時候要把pageNum引數加上
handleCurrentChange(val) {
this.pageNum = val;
this.getSerachResults(); // 查詢列表
this.$router.push({
path: '/searchPage/searchPage',
query: {
pageNum: val,
searchValue: this.searchValue,
qtype: this.qtype,
provincesValue: this.provincesValue,
professionalValue: this.professionalValue
}
});
}
這樣在點選查詢條件時就把引數都新增到列表頁的位址列中了(對了,在跳轉自己頁面的時候列表頁是不會重新載入頁面的)
http://www.sfjdml.com/web/searchPage?searchValue=123&qtype=1&provincesValue=安徽&professionalValue=法醫臨床
然後點選某一條資料跳轉到該條的詳情頁,再返回的時候相當於訪問 http://www.sfjdml.com/web/searchPage?searchValue=123&qtype=1&provincesValue=安徽&professionalValue=法醫臨床 ,然後將位址列中的引數取出來作為查詢條件,走查詢介面就返回跟之前頁面相同的列表資料了。下面這些程式碼可以寫在created中
// 位址列中輸入框的值
if (this.$route.query.searchValue) {
this.searchValue = this.$route.query.searchValue;
}
// 位址列中的頁碼
if (this.$route.query.pageNum) {
this.pageSize = Number(this.$route.query.pageNum);
}
// 位址列中的查詢主體
if (this.$route.query.qtype) {
this.pageSize = Number(this.$route.query.qtype);
}
// 位址列中的所在省份
if (this.$route.query.provincesValue) {
this.pageSize = Number(this.$route.query.provincesValue);
}
// 位址列中的業務領域
if (this.$route.query.professionalValue) {
this.pageSize = Number(this.$route.query.professionalValue);
}
this.getSerachResults(); // 查詢列表
其實,主要的做法是將引數存到位址列中,因為位址列中的引數重新整理也不會丟失。
還有一個問題,如果是滾動到頁面中間或者最後再點選到詳情頁面的。那得保留列表頁的滾動位置,當返回得時候還是在之前的位置。首先在列表頁加入以下程式碼,beforeRouteLeave與methods同級。在離開列表頁的時候判斷是否要跳轉到詳情頁面,是就記錄滾動條位置,存到sessionStorage中
beforeRouteLeave (to, from, next) {
if (to.name === 'details') { // details是詳情頁
let scrollTop = 0;
if (document.documentElement && document.documentElement.scrollTop) {
scrollTop = document.documentElement.scrollTop
} else if (document.body) {
scrollTop = document.body.scrollTop
}
sessionStorage.setItem("offsetTop", scrollTop);
} else {
sessionStorage.clear();
}
next()
},
然後在查詢介面返回列表資料後取出滾動位置給頁面賦值,一定要在返回列表資料後取位置賦值。
// 搜尋結果
getSerachResults() {
this.keywords = this.searchValue + this.provincesValue + this.professionalValue;
serachResults(this.keywords, this.pageNum, this.pageSize,this.qtype)
.then(res => {
if (res.code === 200 && res.obj !== null) {
if (res.obj.content && res.obj.content.length !== 0) {
this.results = res.obj.content;
this.pageNum = res.obj.pageable.pageNumber + 1;
//加上這一段程式碼
this.$nextTick(() => {
let _offset = sessionStorage.getItem("offsetTop"); // 取出滾動位置
document.documentElement.scrollTop = Number(_offset); // 給頁面賦值
});
} else {
this.results = [];
this.pageNum = 1;
}
}
})
.catch(error => {
this.results = [];
this.pageNum = 1;
})
},
最後在之前跳轉存引數的時候清楚掉sessionStorage,因為我只存了滾動位置到sessionStorage裡面,所以在方法中加入sessionStorage.clear()就行
// 點選頭部輸入框的搜尋
search(value) {
this.searchValue = value;
this.getSerachResults(); // 查詢列表
// 跳轉到列表頁,其實是自己跳轉到自己的頁面,這個是為了將引數存到url中
this.$router.push({
path: '/searchPage/searchPage',
query: {
searchValue: this.searchValue, // 輸入框的值
qtype: this.qtype, // 查詢主體
provincesValue: this.provincesValue, // 所在省份
professionalValue: this.professionalValue // 業務領域
}
});
// 清除滾動位置
sessionStorage.clear();
},
這裡清除滾動位置,是為了防止每次點選查詢主體、所在省份、業務領域、頁碼、搜尋按鈕時頁面位置一直不變的問題。
大致思路就是這樣了,如果有錯誤或者疑問的地方望指出。
相關文章
- ZBlog首頁與列表頁相關模板
- vue專案中keep-alive的使用,從詳情頁返回列表時儲存瀏覽位置VueKeep-Alive
- js進入詳情頁再返回到上一個列表頁面時怎麼能讓原來頁面資料不變JS
- AntDesignBlazor示例——建立列表頁Blazor
- (八)列表頁開發
- 構建靜態頁面 之 [ 列表 ]
- PbootCMS內容和列表頁呼叫tags列表boot
- 用weexplus從0到1寫一個app(2)-頁面跳轉和文章列表及文章詳情的編寫APP
- ReactNative開發城市列表頁React
- 【靜態頁面架構】CSS之列表架構CSS
- vue從其他頁面返回保持上一頁的狀態Vue
- 製作首頁的顯示列表
- Android頁面跳轉與返回機制詳解Android
- Flutter 新聞詳情頁二——WebView和列表豎直滾動FlutterWebView
- vue專案中keep-alive快取,從詳情頁返回列表時儲存上一步的資訊VueKeep-Alive快取
- asyUI分頁中,如何實現頁面跳轉,再返回時,...UI
- NOW直播Flutter動態搜尋列表頁實現Flutter
- 小程式列表頁上滑載入更多配合 Laravel 分頁Laravel
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS
- 列表頁取出刪除編輯功能
- 404頁面自動跳轉到首頁
- 低程式碼快速搭建完整商品列表頁
- django返回頁面和json格式列表給前端AntV圖表使用。DjangoJSON前端
- !!!網頁詳情頁成功!!!網頁
- php 跳轉頁面之前彈窗提示PHP
- 直播系統原始碼,啟動APP時判斷登入狀態,引導頁、登入頁、首頁的跳轉方式原始碼APP
- ssycms常用分類列表頁面的呼叫標籤
- Python如何優化列表介面進行分頁Python優化
- React通過redux快取列表資料以及滑動位置,回退時恢復頁面狀態ReactRedux快取
- React Native 跳轉到 APP 推送頁面並獲取推送狀態React NativeAPP
- 重定向到登入頁面後跳轉原頁面
- nginx 設定 404 500 頁面跳轉到指定頁面Nginx
- 織夢繫統列表頁的一些呼叫方法
- 帝國cms怎樣修改列表分頁函式函式
- 翻頁後, 如何確定列表被重新整理?
- 拋棄UITableView,讓所有列表頁不再難構建UIView
- SAP UI5 列表控制元件分頁顯示資料時,如何自定義分頁大小UI控制元件
- 從 URL 到頁面返回的過程?