简单使用

  在layouts中定义一个test.vue,内容如下

  在user中定一个index.vue

  • 如果没有写 layout:"test",就会引入默认的 layout:"default"

  启动程序,npm run dev,访问localhost:10000/user

路由

  Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。

嵌套路由

  在page目录下穿件一个user.vue(名字需要和里面的某一个目录名字一样,我们一user为例),当我们访问/user/index.vue的时候,就会访问 /user.vue,如果user.vue中添加了<nuxt-child/>,index.vue中的内容就会替换<nuxt-child/>。

  • user.vue

  • 效果图

获取url中的参数

  • /xx/2 -->获取2使用 this.$route.params.id;
  • /xx?id=2-->获取参数,使用 route.query.page

  访问:http://localhost:10000/user/1

请求数据(使用服务器渲染技术)

  使用asyncData()方法,在该方法中来请求后台的数据;

  此时渲染数据就是通过Nuxt.js类执行了,我们直接查看源代码可以显示name:小明的同学,而id:后面却不能有相应的值;

  并且asyncData()中不能写一些前端的代码,比如alter(),就会报错

异步调用

  观察客户端,并没有按照方法执行的顺序输出,使用Promise实现了异步调用。
<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完成同步调用

<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和数据整合返回给浏览器

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;
      },

  

优质内容筛选与推荐>>
1、U-Boot-2009-03移植笔记(移植准备)
2、Android程序运行性能优化
3、js实现农历时间代码
4、python全栈开发day47-jqurey
5、值得思考的故事


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn