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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
js DOM 元素ID就是全局变量
Sep 20 Javascript
laytpl 精致巧妙的JavaScript模板引擎
Aug 29 Javascript
js时间日期格式化封装函数
Dec 02 Javascript
javascript实现的登陆遮罩效果汇总
Nov 09 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
Nov 22 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
Oct 25 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
element ui table(表格)实现点击一行展开功能
Dec 04 Javascript
使用JS实现动态时钟
Mar 12 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
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
JavaScript引用类型Array实例分析
2018/07/24 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
js+css3实现炫酷时钟
2020/08/18 Javascript
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
详解在Python程序中使用Cookie的教程
2015/04/30 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
python实现图片筛选程序
2018/10/24 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
python hough变换检测直线的实现方法
2019/07/12 Python
python requests证书问题解决
2019/09/05 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
Pandas之缺失数据的实现
2021/01/06 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
夜大自我鉴定
2013/10/31 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
房产代理公证处委托书
2014/04/04 职场文书
厨房管理计划书
2014/04/27 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
预备党员考察意见范文
2015/06/01 职场文书
民事调解协议书
2016/03/21 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android