VUE学习-router的使用

ref属性的使用:
在VUE中可以通过对一些标签绑定ref属性(ref=“xxx”),再通过this.$ refs.xxx的方式获取原生的jsDOM对象,可以通过这种方式来操作dom重新渲染。如果ref属性绑定的是一个组件,那么this.$refs.xxx获取的就是这个组件对象。
值得注意的是,根据vue的生命周期mounted是在dom元素第一次渲染完成之后执行,所以在mounted之前的created、beforeMount中是无法通过ref获取标签的dom元素。
$refs与 $nextTick的联合使用:
在实际开发过程中,往往会出现需要获取某个标签元素的dom并修改dom属性增加事件让其重新渲染,但在实际使用时发现,获取dom元素之后添加事件,结果并没有实现,如下:

<template>
  <div>
	<input type="text" ref="input" v-show="isShow" />
  </div>
</template>

<script>
  export default {
  	data() {
  	  return {
	    isShow: false,
	  }
  	},
  	mounted() {
	  this.isShow = true;
	  this.$refs.inpu.focus();	//input框获取焦点方法
	}
  }
</script>

实际运行发现,input输入框并没有获取到焦点,这是由于dom元素的改变更新了dom,所以事件没有正常触发。$nextTick()是在dom更新后执行回调函数,在数据更新后执行此方法

<script>
  export default {
  	data() {
  	  return {
	    isShow: false,
	  }
  	},
  	mounted() {
	  this.isShow = true;
	  this.$nextTick(() => {
		this.$refs.input.focus();
	  })
	}
  }
</script>

Router的使用

在学习使用router之前,先去了解一下SPA的概念。SPA是单页面应用,全称是single page application,单页面应用就是只有一张web页面应用,用户与应用程序交互操作产生的变化会动态刷新在当前页面中。它的实现是通过锚点值得改变,不立即重新请求加载页面,而是在一个合适的时间通过ajax请求局部渲染页面。与之相对的就是传统的通过url跳转的多页面开发,早期我开始学习Java时,练习使用的前端页面是用jsp或者html画的,往往一个简单的页面请求会通过url值跳转不同页面,这种方式会导致一个问题就是当页面元素过多时,频繁跳转页面需要重新加载,且当页面元素过多时页面会出现长时间白屏情况,用户体验感很差。
接下来,我在代码中展示router在一个html页面中的简单使用:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
    <div id="app"></div>
    <!-- 引入Vue模块 -->
    <script type="text/javascript" src="vue.js"></script>
    <!-- 引入vue-router模块 -->
    <script type="text/javascript" src="node_modules/vue-router/dist/vue-router.js"></script>
    <script type="text/javascript">
      var Login = {
        template: '<div>我是登录页面</div>'
      };
      var Register = {
        template: '<div>我是注册页面</div>'
      }
      //创建router对象
      var router = new VueRouter({
        // 配置路由对象
        routes:[
          {
            path:'/login',
            component:Login
          },
          {
            path:'/register',
            component:Register
          }
        ]
        
      });
      var App = {
        template: `
        <div>
          <router-link to="/login">登录页面</router-link>
          <router-link to="/register">注册页面</router-link>
          <router-view></router-view>
        </div>
        `
      }
      
      new Vue({
        el:'#app',
        data() {
          return {
            
          }
        },
        components: {
          //交给Vue实例化对象管理
          router,
          App
        },
        template:`<App />`
      })
    </script>
	</body>
</html>

引入vue-router组件后会抛出两个全局组件,router-link和router-view,其中router-link会渲染成为a标签,router-link有一个to属性,这个属性值相当于a标签中的href值,router-view是路由匹配组件的出口。
同时,也可以通过给路由对象命名,再使用name的方式绑定路由

routes:[
  {
	path:'/login',
	name:'login',
	component:Login
  }
]

<div>
  <router-link to="{name:'login'}> </router-link>
</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值