Я использую vue-router
для перенаправления на новый URL после нажатия кнопки. Я хотел бы, чтобы маршрутизатор только добавил параметр запроса в URL, если параметр запроса фактически заполнен. Так что если это null
, то следует , а не добавить параметр.
Сейчас это работает не так, как ожидалось. Взгляните на следующий фрагмент кода (выберите каждый из вариантов и нажмите кнопку).
(похоже, вы не можете использовать маршрутизацию в Stackoverflow, поэтому, пожалуйста, взгляните также на фрагмент JSFiddle: https://jsfiddle.net/okfyxtsj/28/)
Vue.use(VueRouter);
new Vue({
el: '#app',
router: new VueRouter({
mode: 'history',
}),
computed: {
currentRoute () {
return this.$route.fullPath
}
},
data () {
return {
some: this.$route.query.some || null
}
},
template: '<div><select v-model="some"><option :value="null">Option (value = null) which leaves empty parameter in URL</option><option value="someParameter">Option (value = someParameter) which shows parameter with value in URL</option><option :value="[]">Option (value = []) which removes parameter from URL</option></select><br><button @click="redirect">Click me</button><br><br><div>Current Path: {{ currentRoute }}</div></div>',
methods: {
redirect () {
this.$router.push({
path: '/search',
query: {
some: this.some || null
}
})
}
},
watch: {
'$route.query': {
handler(query) {
this.some = this.$route.query.hasOwnProperty('some') ? this.$route.query.some : null
},
},
},
watchQuery: ['some']
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app"></div>
Когда some
равен null
, параметр все равно будет добавлен в URL. Если some
является пустым массивом, он не будет добавлен к URL.
Я не хочу использовать пустой массив в качестве значения по умолчанию, поскольку значение всегда должно быть строкой.
Так как я могу убедиться, что параметр запроса добавляется только к новому маршруту, если он содержит значение, отличное от null
?