$syslog.replace()는 브라우저 쿼리 문자열을 업데이트하지 않습니다.
문제는 쿼리 문자열이 브라우저의 URL 표시줄에 표시되지 않는다는 것입니다.
이 코드는 제품 구성을 추적하기 위해 쿼리 문자열을 업데이트합니다.
두 가지 방법이 있습니다. 첫 번째 방법은 모형을 선택하고 두 번째 방법은 해당 모형에 대한 옵션을 설정합니다.다음은 코드입니다(쿼리 문자열 값은 현재 자리 표시자임).
방법:
chooseModel (option) {
this.$router.replace({
path: this.$route.path,
query: {m: 'model'},
})
},
choose (option) {
if (!this.selectedModel) return
let opt = {}
opt[option] = option
this.$router.push({ // I've tried push and replace
path: this.$route.path,
query: Object.assign(this.$route.query, opt),
})
},
계산:
selectedModel () {
return this.$route.query.m
},
언제chooseModel
는 브라우저에 표시되는 쿼리 스트링을 호출합니다.http://localhost:8080/custom/?m=model
하지만 언제?choose
를 호출하면 브라우저에 표시되는 쿼리 문자열은 그대로 유지됩니다.
WWIW, 코드를 변경했습니다.chooseModel
여러 쿼리 문자열 값을 설정하면 모두 표시됩니다.문제의 원인이 되는 값을 변경하려고 하는 것 같습니다.
디버거를 사용하면 다음 내용을 볼 수 있습니다.$route.query
정답입니다. 쿼리에 대한 변경 내용이 반영됩니다.
Firefox와 Chrome 모두 동일한 동작을 보였기 때문에 브라우저 고유의 동작은 아닌 것 같습니다.
업데이트된 쿼리 문자열을 브라우저에 표시하려면 어떻게 해야 합니까?
이건 내 벌레지만 그래도 이상한 행동이야.
루트는 불변하기 때문에 Object.assign()
수정할 수 없습니다.이상한 점은 쿼리 문자열을 수정하려고 하면 브라우저에 값이 표시되지 않아도 새로운 루트 객체에 설정하려고 했던 값이 표시된다는 것입니다.
수정은 간단합니다.루트 오브젝트를 수정하지 마십시오.
query: Object.assign({}, this.$route.query, opt)
(새로운 링크 위치에 대해 VCavallo에 감사)
언급URL : https://stackoverflow.com/questions/43428761/router-replace-doesnt-update-browser-query-string
'programing' 카테고리의 다른 글
VueJs 템플릿이 아닌 메서드에서 이벤트를 듣는 방법 (0) | 2022.07.17 |
---|---|
String replace()와 replaceAll()의 차이점 (0) | 2022.07.17 |
자바가 정말 느려요? (0) | 2022.07.17 |
Nuxt의 구성 API에서 vuex 맵 도우미를 사용하는 방법 (0) | 2022.07.17 |
Linux 커널의 container_of 매크로 이해 (0) | 2022.07.17 |