zoukankan      html  css  js  c++  java
  • Vue中的路由以及ajax

    Vue请求ajax之fetch

    使用方法:

    fetch(url,{
      headers:{
       "token":localStorage.getItem('token'),
       "content-type":"apllication-xxx-urlencoded"
      
      },
      methods:"GET/POST",
      data:{
       
      }
     }).then(function(res){
      return res.json()  //text() arrayBuffer() blob() formData()
     }).then(res=>{
      //res 才是请求的结果 格式化之后(什么格式取决于 第一个 then 返回的处理方法)
     })

    fetch 兼容性差:使用promise 不支持 ie11及以下的 且,在vue react等脚手架中 配置babel es6转es5,也无法转换promise
      使用babel-polyfill 插件来解决
    Vue 如何兼容IE(IE9及以上),  使用babel-polyfill 插件来解决
    解决fetch 兼容性问题?
     1,使用babel-polyfill
     2,直接使用 git https://github.com/github/fetch
      基于原生的fetch 封装的,当有的浏览器不支持fetch时,转换成普通的xhr对象(内部集成了babel-polyfill)

    Vue的axiso ajax库

    axios 是一个 封装好的 第三方ajax请求的库
        特点:支持restfulapi    支持promise 解决回到地狱    支持ajax请求拦截

    get请求:
        axios.get('url?params1=v&params2=值2').then().catch()
        axios.get(url,{
            params:{
                key1:v1,
                key2:v2
            }
        })
    post请求:
        axios.post(url,{
            key1:v1,
            key2:v2
        }).then().catch()

    Vue中的路由

    单页面应用:single page application     整个项目只有一个html
    优点:
        页面性能较高
        页面间切换速度很快
    缺点:
        不利于seo (搜索引擎优化)
        爬虫 爬取页面关键字
        单页面应用一般都是基于webpack进行构建的,所以资源,都是在js中,爬虫不认识js
    vue路由:  一个地址 对应 一个组件

    Vue中的嵌套路由

    1,在以及路由 路由规则中 routes 中 定义 children属性([]);在children属性中,定义该路由的子路由 规则(子路由路径 最好加上 父路由路径作为前缀)
    2,在 一级路由 对应的 组件  中 设置 router-view 作为二级路由的出口
    3,设置 一级路由中 默认显示某个二级路由
                         {
                            path:"/news",
                            redirect:"/news/nativeNews"
                        },
                        {
                            path:"",
                            component:NativeNews
                        },

    Vue中的命名路由

    定义路由规则时,可以给当前 路由起一个名字  (定义一个name属性)
            const routes = [
                {
                    path:"/",
                    redirect:"/home"
                },
                {
                    path:"/home",
                    name:"home",
                    component:Home
                },
                {
                    path:"/news",
                    name:"news",
                    component:News
                }
            ];
        router-link
            to属性值
                字符串
                    router-link to="/news" 通过path跳转
                对象
                    router-link :to="{name:'home'}" 可以通过名字跳转
                    router-link :to="{path:'/home'}" 可以通过path跳转
                传参  params传参
                router-link :to="{name:'home',params:{id:111}}"
                在目标路由中  this.$route.params.id获取
            注意:
                1,params传参 是 隐式(不会在地址栏显示),刷新后 参数会丢失
                2,params传参 必须 和 name跳转路由 一起使用,和path 不起效果

    Vue编程式导航

    声明式导航 : 在模板(html中),通过标签(组件) 跳转  router-link跳转
    编程式导航 : 在js中通过api跳转
    vueRouter 给 Vue的原型中 还灌入一个对象  $router,保存了 操作 路由的 api
    push
    this.$router.push()  跳转路由
    push参数 同 router-link to属性的值(一毛一样)
     字符串
                   this.$router.push("/news") 通过path跳转
                对象
                     this.$router.push({name:'home'}) 可以通过名字跳转
                     this.$router.push({path:'/home'}) 可以通过path跳转
                传参  params传参
                 this.$router.push({name:'home',params:{id:111}})
                在目标路由中  this.$route.params.id获取
     this.$router.replace() 参数 同上
     与push不同的是?
        跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。  (返回上一步 时,之前 不存在了,到上两步)
    this.$router.go(n)
            go(0)  刷新
            go(1) 前进一步
            go(-1) 返回上一步

    Vue中query传参

    router-link
        :to="{path:'/news',query:{id:1,id2:2}}"
    this.$router.push({
        path:'/news',
        query:{
            id:1,
            id2:2
        }
    })
    获取: this.$route.query.xxx

    Vue中的导航守卫

    全局守卫
        全局前置守卫
            router.beforeEach((to,from,next)=>{
            });
        全局后置守卫
            router.afterEach((to,from)=>{
            })
    路由独享
        只针对某个路由
        routes:[
            {
                path:"/home",
                component:Home,
                beforeEnter:(to,from,next)=>{
                }
            }
        ]
    组件内部
        beforeRouteEnter
        beforeRouteUpdate  新增 主要用于 动态路由
        beforeRouteLeave
     
     
  • 相关阅读:
    POJ 1328 Radar Installation
    POJ 1700 Crossing River
    POJ 1700 Crossing River
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3069 Saruman's Army(贪心)
    poj 3069 Saruman's Army(贪心)
    Redis 笔记与总结2 String 类型和 Hash 类型
    数据分析方法有哪些_数据分析方法
    数据分析方法有哪些_数据分析方法
  • 原文地址:https://www.cnblogs.com/broue/p/13423434.html
Copyright © 2011-2022 走看看