Vue两种组件类型:递归组件和动态组件的用法


Posted in Javascript onAugust 06, 2020

一递归组件

递归组件的特性就是可以在自己的template模板中调用自己本身。值得注意的它必须设置name属性。

// 递归组件 recursive.vue
<template>
 <div>
 <p>递归组件</p>
 <Recursion :count="count + 1" v-if="count < 3"></Recursion>
 </div>
</template>

<script>
 export default {
 name: "Recursion",//必须设置name属性
 props: {
  count: {
  type: Number,
  default: 1
  }
 }
 }
</script>

这个例子中父页面使用该递归组件会调用三次recursive组件,值得注意的是递归组件必须设置递归次数限制数量

否则会抛出错误,该例子中通过count来限制递归次数。

二 动态组件

如果将一个Vue组件命名为Component会报错,因为Vue提供来特殊的元素<component>来动态挂载不同组件。

并使用is特性来选择要挂载的组件。

// parentComponent.vue
<template>
 <div>
 <h1>父组件</h1>
 <component :is="currentView"></component>
 <button @click = "changeToViewB">切换到B视图</button>
 </div>
</template>

<script>
 import ComponentA from '@/components/ComponentA'
 import ComponentB from '@/components/ComponentB'
 export default {
 components: {
  ComponentA,
  ComponentB
 },
 data() {
  return {
  currentView: ComponentA // 默认显示组件 A
  }
 },
 methods: {
  changeToViewB () {
  this.currentView = ComponentB // 切换到组件 B
  }
 }
 }
</script>

通过改变currentView的值就可以动态切换显示的组件,与之类似的是vue-router的实现原理,前端路由到不同的页面实际上就是加载不同的组件。

补充知识:Vue route部分简单高级用法

一、改变页面title的值

在开发时常常需要在切换到不同页面时改变浏览器的title值,那么我们就可以在定义路由的时候通过配置 meta 属性

来改变title值。

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
import UserInfo from ".././userInfo.vue";
import ChangeCommunity from ".././ChangeCommunity.vue";

var vueRouter= new Router({
routes: [
 {
 path: '/',
 name: 'UserInfo',
  component: UserInfo,
  meta: {
   title: '我的信息'
  }
  },
  {
   path: '/ChangeCommunity',
   name: 'ChangeCommunity',
   component: ChangeCommunity,
   meta: {
   title: '我的社区'
   }
  },
 
]
})
vueRouter.beforeEach((to, from, next) => {
/* 路由发生变化修改页面title */
if (to.meta.title) {
document.title = to.meta.title;
}
next();
})
export default vueRouter

当从我的信息页面跳转到我的社区页面时,对应的title值也会由“我的信息”变成“我的社区”。

二、路由懒加载

当项目页面比较多时,初始化时候加载所有页面路由,性能十分差,这时候就可用懒加载,要渲染那个页面就加载那个页面。

例如:

{
   path: '/ChangeCommunity',
   name: 'ChangeCommunity',
   component: ChangeCommunity,
   resolve
 },

还可以

{
   path: '/ChangeCommunity',
   name: 'ChangeCommunity',
   component: resolve=>require(['ChangeCommunity'],resolve)
 },

两种写法都可以。

三 、滚动行为

使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。

vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。

注意:这个功能只在支持 history.pushState 的浏览器中可用。

例如:

 const router = new VueRouter({
 routes: [...],
 scrollBehavior (to, from, savedPosition) {

  if (savedPosition) {
  return savedPosition//滚动到指定位置
 
 } else {
 
return { x: 0, y: 0 }
 
 }
 } })
“滚动到锚点”的行为:
scrollBehavior (to, from, savedPosition) {
 if (to.hash) {
 return {
  selector: to.hash
 }
 }
}
异步滚动
scrollBehavior (to, from, savedPosition) {
 return new Promise((resolve, reject) => {
 setTimeout(() => {
  resolve({ x: 0, y: 0 })
 }, 500)
 })
}

以上这篇Vue两种组件类型:递归组件和动态组件的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js调用后台servlet方法实例
Jun 09 Javascript
jQuery判断checkbox是否选中的小例子
Dec 02 Javascript
什么是 AngularJS?AngularJS简介
Dec 06 Javascript
Bootstrap模仿起筷首页效果
May 09 Javascript
php 修改密码实现代码
May 24 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
Dec 20 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
Apr 27 Javascript
微信小程序实现登录注册tab切换效果
Dec 29 Javascript
微信小程序wxs实现吸顶效果
Jan 08 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
Feb 09 Javascript
微信小程序实现watch监听
Jun 04 Javascript
vue数据更新UI不刷新显示的解决办法
Aug 06 #Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 #Javascript
基于JavaScript的数据结构队列动画实现示例解析
Aug 06 #Javascript
解决vue动态下拉菜单 有数据未反应的问题
Aug 06 #Javascript
JavaScript中ES6规范中let和const的用法和区别
Aug 06 #Javascript
在vue项目中利用popstate处理页面返回的操作介绍
Aug 06 #Javascript
JavaScript中作用域链的概念及用途讲解
Aug 06 #Javascript
You might like
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
两个php日期控制类实例
2014/12/09 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
Python采集腾讯新闻实例
2014/07/10 Python
Python基础之函数用法实例详解
2014/09/10 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
详解python分布式进程
2018/10/08 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
西部世纪.net笔试题面试题
2014/04/03 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
工作自荐信
2013/12/11 职场文书
劲霸男装广告词
2014/03/21 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
vue自定义右键菜单之全局实现
2022/04/09 Vue.js
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby