我正在使用Nuxt和Vue,我正在尝试提交表单,将用户重定向到包含提交的参数的新路由,发送API请求以获取一些数据,然后呈现该数据。
我通过简单地将表单操作设置为新路径并手动将所有URL参数添加到API请求来实现此目的。
首先,我使用路线/search
创建一个简单的表单。
<form action="/search">
<input type="text" name="foobar">
<button type="submit">Submit</button>
</form>
提交表单时,用户离开当前页面并被重定向到新页面。该网址现在如下所示:http://www.example.com/search?foobar=test
。现在,我使用foobar
获取this.$route.query.foobar
参数并将其发送到我的API。
然而,我的方法中的问题是在提交表单时用户离开当前页面并且将发生新的页面加载。在构建渐进式Web应用程序时,这不是我们想要的。
所以我的问题是如何在Nuxt / Vue中提交表单并重定向到包含提交参数的新路由?
答案 0 :(得分:11)
<form>
的默认行为是重新加载页面onsubmit
。实施SPA时,最好避免调用<form>
的默认行为。
利用nuxtjs中现成的router module
将使所有重定向控件在应用程序中流动。如果我们尝试通过<form>
触发可用的事件,则会发生浏览器重新加载。必须避免这种情况。
所以我的问题是如何在Nuxt / Vue中提交表单并重定向到 包含提交参数的新路线?
您可以尝试以下方法
<强>第一强>
使用.stop.prevent
修饰符来阻止提交按钮调用默认的<form>
行为。这类似于在jQuery中使用event.stopPropagation();
和event.preventDefault();
<form>
<input type="text" name="foobar" v-model="foobar">
<button type="submit" @click.stop.prevent="submit()">Submit</button>
</form>
然后
创建
vue模型对象foobar
vue方法submit
使用this.$router.push
重定向到下一页。这将使控制流程保持在SPA内。如果你想将任何数据发送到服务器,那么你可以在调用this.$router.push
之前执行此操作,否则你可以重定向并继续你的逻辑。
export default {
data(){
return {
foobar : null
}
},
methods: {
submit(){
//if you want to send any data into server before redirection then you can do it here
this.$router.push("/search?"+this.foobar);
}
}
}
答案 1 :(得分:0)
只需添加以下内容: @ submit.prevent =“ false”
<form @submit.prevent="false">
<div class="form-group">
</div>
</form>
我希望这对您有用:)
答案 2 :(得分:0)
submitClick(){
this.$router.push({path: '/search', query:{key: value}})
}
<form @submit.stop.prevent="submitClick">
<input v-model="keyword">
<button type="submit">Search</button>
</form>
之前可以有任何逻辑