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禁止小键盘输入数字功能代码
Aug 01 Javascript
jquery map方法使用示例
Apr 23 Javascript
Jquery 实现table样式的设定
Jan 28 Javascript
理解javascript定时器中的setTimeout与setInterval
Feb 23 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
Mar 08 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
Oct 28 Javascript
基于LayUI实现前端分页功能的方法
Jul 22 Javascript
360doc网站不登录就无法复制内容的解决方法
Jan 27 Javascript
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
Vue EventBus自定义组件事件传递
Jun 25 Javascript
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
swiper实现导航滚动效果
Dec 13 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
一个简单计数器的源代码
2006/10/09 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
javascript 常用方法总结
2009/06/03 Javascript
js 省地市级联选择
2010/02/07 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
js实现随机点名小功能
2017/08/17 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
历史专业个人求职信分享
2013/12/20 职场文书
梅花魂教学反思
2014/04/25 职场文书
厕所文明标语
2014/06/11 职场文书
庆国庆活动总结
2014/08/28 职场文书
单位实习鉴定评语
2015/01/04 职场文书
节约用电倡议书
2015/04/28 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
七年级作文之雪景
2019/11/18 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript