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 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
js AspxButton的客户端操作
Jun 26 Javascript
自己动手开发jQuery插件教程
Aug 25 Javascript
JavaScript变量声明详解
Nov 27 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
在JavaScript中处理数组之reverse()方法的使用
Jun 09 Javascript
jquery点击切换背景色的简单实例
Aug 25 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
jQuery滑动到底部加载下一页数据的实例代码
May 22 jQuery
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 Javascript
ES6箭头函数和扩展实例分析
May 23 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
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
Java如何读取CLOB字段
2013/10/10 面试题
班组长的岗位职责
2013/12/09 职场文书
后勤人员岗位职责
2013/12/17 职场文书
办公室经理岗位职责
2014/01/01 职场文书
物理研修随笔感言
2014/02/14 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
大学生实训报告总结
2014/11/05 职场文书
初中中等生评语
2014/12/29 职场文书
房贷收入证明范本
2015/06/12 职场文书
同事去世追悼词
2015/06/23 职场文书
关于幸福的感言
2015/08/03 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript
TV动画《间谍过家家》公开PV
2022/03/20 日漫