vue-router的使用

1.在使用vue-router时,路由的嵌套中,子路由不加/。因为以 / 开头的嵌套路径会被当作根路径。

如:

const router = new VueRouter({
  routes: [
    { path: '/user/:id', component: User,
      children: [
        {
          // 当 /user/:id/profile 匹配成功,
          // UserProfile 会被渲染在 User 的 <router-view> 中
          path: 'profile',   //这里的profile不要写成/profile,否则会被当做根路径
          component: UserProfile
        },
        {
          // 当 /user/:id/posts 匹配成功
          // UserPosts 会被渲染在 User 的 <router-view> 中
          path: 'posts',
          component: UserPosts
        }
      ]
    }
  ]
})

vue-router有两种使用方式:一种是<router-link to="home"></router-link>标签(官网上to前加了:to,但是我在实际项目中这样写报错,不加的时候正常),一种是编程式导航:

该方法的参数可以是一个字符串路径,或者一个描述地址的对象。例如:(在vue中通过this.$router获取router对象)

// 字符串
router.push('home')    //push方法里的路径前不用加/,标签式的也不用加/

// 对象
router.push({ path: 'home' })

// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})

// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

 

注意:如果提供了 pathparams 会被忽略,上述例子中的 query 并不属于这种情况。取而代之的是下面例子的做法,你需要提供路由的 name 或手写完整的带有参数的 path

const userId = 123
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }}) // -> /user

 

同样的规则也适用于 router-link 组件的 to 属性。

 获取路由参数:

this.$route.query ;返回query参数对象
this.$route.params ;返回param参数对象


注意:是this.$route,不是$router

  

2.vue-router有两种路由,hash和history

hash:

通过hash进行路由匹配及跳转

history: (mode: 'history')

没有#号,更像真的url。使用了h5的history api.

使用webpack-dev-server时,会将dist文件夹设置为静态文件夹,里面的资源都可以直接访问,如果使用hash路由,路由只会根据#后面的值来匹配路由。如果使用history 路由,路由会根据根目录后的路径进行路由匹配。

设置historyapicallback:true后会对所有匹配不到的请求(404)返回index.html文件,这样hash路由的#号前面无论是什么都会返回index.html页面,而history由于和真实路径一样,请求时虽然也会返回index.html页面,但是根路径后面的路径会和设置的路由匹配,匹配上才能正常显示,可以通过设置

{
path:"*",
component:Notfound
}

在匹配不到的时候,匹配一个Notfound组件。

注意:webpack-dev-server是启动了一个express服务器,通过设置publicPath设置静态资源build文件夹的路径。默认情况下publicpath:"/",所以通过localhost:8080/可以直接访问build文件夹下的资源,如果设置为“/assets/“,则通过localhost:8080/assets/访问build文件夹下的资源。再通过设置historyapicallback:true可以让所有404请求都返回index.html页面,这样history类型的路由就可以正常刷新了。即使设置了publicpath值,history路由的匹配依然是从根路径开始匹配的("localhost:8080/"),所以配置路由的时候要加上”/assets/".

 

module.exports = {
  entry: {
    app: ["./app/main.js"]
  },
  output: {
    path: path.resolve(__dirname, "build"),
    publicPath: "/assets/",
    //此时相当于/assets/路径对应于 build 目录,是一个映射的关系
    filename: "bundle.js"
  }
}

 

  

 

2.在vue组件化开发中,在mounted方法里可以直接写jquery的监听函数。如下(但是不能使用onclick="hello()"这种事件绑定方法),但是使用如下监听以后在各个组件中都有效果。

<script>
export default {
  name: 'taskDetail',
  mounted:function(){
  $('body').click(function(){
    alert("f");
  });
    $(window).scroll(function(){
      
    })
  },
  methods:{
   executeResult:function(){
     
      this.$router.push('executeResult');

     }
   } 
}
</script>

 

posted @ 2017-11-22 11:41  申小贺  阅读(426)  评论(0编辑  收藏  举报