애플릿의 페이지 이동 전달 대상 파라미터 문제
1960 단어 애플릿 로드
이 문제를 해결하는 방법도 몇 가지가 있다.
하나는 대상을 앱에 저장하는 것이다.js 전역 변수, 다음 페이지에서 바로 app.js 값을 가져옵니다.그러나 이것은 매우 어쩔 수 없는 방법이다. 만약에 이 매개 변수가 여러 개 있다면 이런 전체적인 변수는 크게 추측해야 할 뿐만 아니라 우리의 개발 습관에 부합되지 않기 때문이다.
다른 하나는 데이터를 캐시에 저장한 다음 다음 다음 페이지로 들어갈 때 캐시에서 꺼내는 것이다.생각은 첫 번째 것과 차이가 많지 않고 추천하지 않는 방법이기도 하며, 매번 다 쓸 때마다 이 캐시를 제거해야 한다. 그렇지 않으면 데이터가 혼란스러워질 수도 있다.
다음은 또 다른 방법을 소개합니다. 데이터를string으로 바꾸어 URL 뒤에 연결하면 깔끔합니다.그러나 대상의 매개 변수를 하나하나 맞추는 것도 번거롭기 때문에 여기에 url을 봉인했다.js 도구 클래스, 사용이 간단하고 편리합니다.잔말 말고 코드로 바로 올라가세요.
// url
const buildURL = (url, query = {}, isSequence = true) => {
if (!query) return url
const joiner = url.match(/\?/) ? '&' : '?'
const queryStr = Object.keys(query)
.map(key => `${key}=${encodeURIComponent(isSequence ? JSON.stringify(query[key]) : query[key])}`)
.join('&')
return url + joiner + queryStr
}
// query
const decodeQuery = (originQuery = {}, isSequence = true) => {
const result = {}
if (!originQuery) return {}
return Object.keys(originQuery).reduce((prev, curr) => {
result[curr] = decodeURIComponent(originQuery[curr])
if (isSequence) {
result[curr] = JSON.parse(result[curr])
}
return result
}, result)
}
module.exports = {
buildURL,
decodeQuery
}
사용 방법은 매우 간단하고 전달할 때 암호화된다.괄호 안에 임의로 매개 변수를 추가할 수 있으며, 복호화 값을 추출할 때, 전송값에 따라 추출할 수 있다.
let url = app.urlHelper.buildURL('/pages/laugh/detail/index', {
item: this.data.item
})
wx.navigateTo({
url,
})
사용 시 암호를 해독하여 페이지 onLoad 메서드에서 다음을 수행합니다.
onLoad: function(options) {
let item = app.urlHelper.decodeQuery(options).item
}
이렇게 하면 애플릿 페이지 간의 값 전달 문제를 완벽하게 해결할 수 있다.
더 좋은 방법이 있다면, 함께 교류하는 것을 환영합니다.