zoukankan      html  css  js  c++  java
  • Vue路由的基本使用(2018/11/25)

     
    安装 :
    每次新建vue项目需要用到路由的时候就需要在文件目录的CMD中安装        cnpm i vue-router --save   
     
    一、分步版的路由
    操作步骤:
    ①在main.js中导入    import VueRouter from "vue-router"   //属于第三方插件
    ②在main.js中 安装组件  Vue.use(VueRouter)  //Vus.use  起到全局注册的作用  实际上是调用了VueRouter组件中的install()方法去安装这个组件
    ③实例化 
    var router = new VueRouter({  //  实例化 
       routes:[
           {
              path:"/one",   //这是路由的hash  路径   localhost:8080/#/one
              component:one  //这是路径下对应的组件
           }
       ]
    })
     
    ④注册 路由
    new Vue({
      el: '#app',
      router:router,  //   注册
      components: { App },
      template: '<App/>'
    })
     
    ⑤ 引入对应的组件文件
     
    import HelloWorld from  './components/HelloWorld'
     
    ⑥在APP.vue中的 <template>中引入 路由组件   <router-view/>
     
     
    二、组合版的VUE路由
     
    在src路径下新建一个router文件夹-----> 然后建立一个index.js的文件 用index命名就可以直接访问到根路径“/”
    src/router/index.js
    import Vue from 'vue'
    import VueRouter from 'vue-router'  //  1)引入路由的第三方插件
    import one from '@/components/one'   //   5)引入对应的组件文件
    import HelloWorld from  '@/components/HelloWorld'   //@代表src文件   在src文件夹中的所有文件都可以通过src访问
    Vue.use(VueRouter)     //  2)安装
    var router = new VueRouter({   // 3)实例化
       routes:[
           {
              path:"/one",   //这是路由的hash  路径   localhost:8080/#/one
              component:one  //这是路径下对应的组件
           },
           {
              path:"/hello",
              component:HelloWorld
           }
       ]
    })
    export default router  //将路由暴露出去
     
     
    main.js  
     
    import Vue from 'vue'
    import App from './App'
    import router from './router'
    Vue.config.productionTip = false
     
    new Vue({
      el: '#app',
    router, //在此处注册路由 APP.vue才可以引入
      components: { App },
      template: '<App/>'
    })
     
    APP.vue
     
    <template>
      <div id="app">
        <router-view/>   <!--6) 引入路由组件-->
        <router-link  to='/one'>one</router-link>   <!-- 7)将路由的链接 渲染到页面上进行跳转-->
        <router-link  to='/hello'>hello</router-link>
      </div>
    </template>
     
    路由的原理   router是前端路由  (根据hash值的不同切换不同的组件)
        如何监控到hash值得变化?
                hashchange  事件-------->能够监控hash值的变化
    index.html
     
    <!DOCTYPE html>
    <html>
       <head>
           <meta charset="utf-8" />
           <title></title>
           <script  src="https://cdn.bootcss.com/jquery/3.3.0/jquery.js"></script>
       </head>
       <body>
           <a href="#/a">a</a>  //分别建立了三个 html文件
           <a href="#/b">b</a>
           <a href="#/c">c</a>
           <div id="router-view">
              
           </div>
           <script type="text/javascript">
              var routers=[
                  {
                     path:'/a',
                     component:'./components/a.html'
                  },
                  {
                     path:'/b',
                     component:'./components/b.html'
                  },
                  {
                     path:'/c',
                     component:'./components/c.html'
                  }
              ]
              var  cache={} //缓存对象
              location.hash='#/a'  //设置让a组件的内容直接显示在页面上
              window.addEventListener("hashchange",()=>{ //利用hashchange事件 可以获取到hash值
    //            console.log(location.hash)
                  var hash =  location.hash.replace("#",'') //将hash中的”#“去掉
                  console.log(hash)
                 routers.forEach((item)=>{  //利用foreach遍历routers中的每一项
                     if(item.path===hash){
                         if(cache[hash]){  //如果缓存对象里有 那么填入html的是之前缓存过的res
                            $("#router-view").html(cache[hash])
                         }else{
                            $.ajax(item.component).then((res)=>{//用ajax请求组件中的所有值
                            $("#router-view").html(res)   //填入div中
                            cache[hash]=res     //如果没有就将res的内容填入进去
                               console.log(cache[hash])
                            })
                         }
                     }
                  })
              })
           </script>
       </body>
    </html>
        如果没有vue-router怎么切换组件?
                (1)利用动态组件切换
                (2)自己监控hash值变化,变化之后产生不同的组件
    三、自动生成版的 VUE路由
     
                    在建立vue项目的时候 在是否安装vue-router 那一项选择yes   src文件夹下就会自动生成一个router文件夹 其中的index.js文件就包含了router的基本样式
                    
     
              用不同的路由切换组件的思路:
                    先创建需要的组件----->在index.js中进行操作,引入这些组件,并设置路径对应的组件----->在APP.vue中引入组件的链接------>如果有子路由需要在父级组件中引入子组件的链接
             
                
                
    index.js
     
    import Vue from 'vue'
    import Router from 'vue-router'
    import HelloWorld from  '@/components/HelloWorld'
    import One from '@/components/One'    //1)引入组件
    import Two from '@/components/Two'
    import Gn from '@/components/gn'
    import Gj from '@/components/gj'
    Vue.use(Router)
    export default new Router({
      routes: [  //2) 设置路径对应的组件
        {
           path:'/',
           redirect:{'name':'one'}  //通过name的重定向  当路径为”/“的时候跳转到one
        },
        {
          path: '/one', //起一个路径名
          name: 'one',  // name---命名路由  当path的路径比较长的时候可以用name来访问  
          component:One  //这是路径名对应得组件   要与import 引入的那个名称一样
        },
        {
          path: '/two',
          name: 'two',
          component:Two,
          redirect:{'path':'/two/gn'}, //通过路径的重定向
          children:[ // 子路由 就是路由中嵌套了几个路由
           {
              path:'/two/gn',
              component:Gn
           },
           {
              path:'/two/gj',
              component:Gj
           }
          ]
        }
      ]
    })
     
    APP.vue
    <template>
      <div id="app">  
        <router-view/>
        <router-link  to="/one">one</router-link>
        <router-link  to="/two">two</router-link>
      </div>
    </template>
     
    two.vue
    <template>
       <div>
           two component
           <router-view/>
           <router-link to="/two/gn">国内新闻</router-link>
           <router-link to="/two/gj">国际新闻</router-link>
       </div>
    </template>
     
     
     
     
     
  • 相关阅读:
    AIR 访问网络资源老提示 Unhandled ioError 错误的解决办法
    Flex组件 EWindow 和 TimerStepper
    获取Flex SDK加载进度的方法
    我的第一个ANE程序
    给flex的自定义组件分类,使自定义组件放到组件面板的不同文件夹下!
    The status code returned from the server was: 500
    如何有效编写软件的75条建议
    让上帝讲真话——谈客户访谈思路
    C#之虚函数
    向您推荐几个虚拟化技术的BLOG(5.8日增加)
  • 原文地址:https://www.cnblogs.com/zsrTaki/p/11510589.html
Copyright © 2011-2022 走看看