在page目录下穿件一个user.vue(名字须要和里面的某一个目录名字同样,咱们一user为例),当咱们访问/user/index.vue的时候,就会访问 /user.vue,若是user.vue中添加了<nuxt-child/>,index.vue中的内容就会替换<nuxt-child/>。html
访问:http://localhost:10000/user/1前端
使用asyncData()方法,在该方法中来请求后台的数据;vue
此时渲染数据就是经过Nuxt.js类执行了,咱们直接查看源代码能够显示name:小明的同窗,而id:后面却不能有相应的值;java
而且asyncData()中不能写一些前端的代码,好比alter(),就会报错ajax
<script> export default { layout: 'test', async asyncData() { console.log("服务器打印数据") return { name: '小明同窗' } }, data() { return { id: '' } } , methods: { a() { return new Promise(function (resolve, reject) { setTimeout(function () { //alert(1) resolve(1) }, 2000) }) }, b() { return new Promise(function (resolve, reject) { setTimeout(function () { //alert(2) resolve(2) }, 1000) }) } }, mounted() { this.id = this.$route.params.id; this.a().then(res => { alert(res) }) this.b().then(res => { alert(res) }) } } </script>
使用async/await完成同步调用 vue-router
<script> export default { layout: 'test', async asyncData() { console.log("服务器打印数据") //定义a方法,直接会调用 var a = await new Promise(function (resolve, reject) { setTimeout(function () { //返回a console.log("a") //必须有返回值,否在会堵塞在这 resolve("a") },2000) }); //定义b方法 var b = await new Promise(function (resolve, reject) { setTimeout(function () { console.log("b") resolve("b") }, 1000) }); return { name: '小明同窗' } }, data() { return { id: '' } }, mounted() { this.id = this.$route.params.id; } } </script>
部分代码,只能进行页面刷新,从新生成html,由于为了SEO,不能使用ajax来进行数据的渲染,只能从新刷新页面,让nuxt.js 来请求后端,获取数据,将html和数据整合返回给浏览器npm
methods:{ //分页触发 handleCurrentChange(page) { //当前页码 this.page = page //将当前页码设置到route中 this.$route.query.page = page //将route中全部参数转成key/value串 let querys = querystring.stringify(this.$route.query) window.location = '/course/search?'+querys; },