elementUI的动态tabs页的使用,vue的动态组件的操作
elementUI的动态tabs页的使用,vue的动态组件的操作
有时候我们需要用到动态的tab页,结合不同的页面内容来显示。这里是使用了elementUI的动态tabs页来实现的
<div class="right" v-loading="loading">
<div class="between main-top">
<span @click="addTab(editableTabsValue,'groupInfo(组件的名称)','tabs页的名称')">add tabs</span>
</div>
<el-tabs v-model="editableTabsValue" type="card" @tab-remove="removeTab">
<el-tab-pane v-for="(item, index) in editableTabs" :key="index" :label="item.title" :name="item.name" :closable='item.closable'>
<component :is='item.content' :objId='objId' @fatherEvent="btnclick" @delTab='delTabs'></component>
<!--
:closable='item.closable' ----通过closable来判断当前tabs是否可以关闭
component:通过使用component元素,在根据组件中的is属性来动态的切换不同的组件。
:is='item.content':这是动态绑定的组件
:objId='objId' ----这个是组件之间的传值,父组件传值给子组件的
@fatherEvent="btnclick" ----这是子组件对父组件的操作
@delTab='delTabs' ----这是子组件对父组件的操作
-->
</el-tab-pane>
</el-tabs>
</div>
//---------------------引入组件的模块
import chat from './chat'
import create from './create'
import statements from './statements'
import groupInfo from './groupInfo'
import renew from './renew'
import project from './project'
export default {
props: {},
components: {
chat,
statementsGnode,
createGnode,
groupInfo,
renewGnode,
project
},
data() {
return {
editableTabsValue: '1',
editableTabs: [{//第一个默认打开的tabs
title: '项目通讯',//tabs页的名称
name: '1',
content: chat,//对应组件名称
closable:false// 是否可以关闭,false是不可以,true是可以关闭
}],
tabIndex: 1,
//动态子组件
objId:'',
};
},
addTab(targetName,name,title) {//----------------这是添加tabs页的方法,三个值对应着上面点击方法传过来的,但是也不是三个都要,第一个值是必须要传的
let newTabName = ++this.tabIndex + '';
if (name === 'statements') {//------------------这几个判断是我要区分开不同的组件所需要的值来做的
this.objId = title
this.editableTabs.push({
title: title.name,
name: newTabName,
content: name,
closable:true
});
} else if (name === 'renew'){
this.objId = title
this.editableTabs.push({
title: '够着'+title.name,
name: newTabName,
content: name,
closable:true
});
}else{
this.editableTabs.push({
title: title,
name: newTabName,
content: name,
closable:true
});
}
this.editableTabsValue = newTabName;
},
removeTab(targetName) {//--------------这是关闭tab页的
let tabs = this.editableTabs;
let activeName = this.editableTabsValue;
if (activeName === targetName) {
tabs.forEach((tab, index) => {
if (tab.name === targetName) {
let nextTab = tabs[index + 1] || tabs[index - 1];
if (nextTab) {
activeName = nextTab.name;
}
}
});
}
this.editableTabsValue = activeName;
this.editableTabs = tabs.filter(tab => tab.name !== targetName);
},
btnclick(com,item){//这个子组件点击控制父组件的方法,不同的子组件对应不同的调用
if (com === "groupInfo") {
this.ChatMamList();
} else if(com === 'renewGnode'){
let value = this.editableTabsValue
this.addTab(value,com,item)
}else{
this.manageNode();
}
},
delTabs(targetName){ //---------------这是子组件想要关闭当前tab页的,控制父组件的操作
let tabs = this.editableTabs;
let activeName;
tabs.forEach((tab, index) => {
if (tab.title === targetName) { //因为判断不一样
let nextTab = tabs[index + 1] || tabs[index - 1];
if (nextTab) {
activeName = nextTab.name;
}
}
});
this.editableTabsValue = activeName;
this.editableTabs = tabs.filter(tab => tab.title !== targetName);
this.manageNode();
},
以上是父组件的的代码
下面是子组件的代码
props: {
objId:{//----------------接受父组件的值
type:Object
}
},
renew(){
let objInfo = this.objId
this.Gnodedialog = false
//调用父组件的方法,fatherEvent--是在父组件的的动态组件component上面的方法,注意看上面的代码
//'renew',objInfo,都是传值
this.$emit("fatherEvent",'renew',objInfo)
}
elementUI的动态tabs页的使用,vue的动态组件的操作的更多相关文章
- [转] JQuery UI Tabs 动态添加页签,并跳转到新页签
[From] https://blog.csdn.net/zhangfeng2124/article/details/76672403 需求: 1.tabs默认只有一个页签,但是需要点击某按钮,动态添 ...
- Element + Vue I18n动态import加载国际化语言包翻译文件
需求 项目为多页应用,包含产品a.b.c.d.e,每个产品都有自己的翻译文件.一次加载所有翻译文件是极度不合理的.于是考虑动态加载. 实现 参考官方文档:延迟加载翻译 项目结构 │ ├── dist ...
- Vue加载组件、动态加载组件的几种方式
https://cn.vuejs.org/v2/guide/components.html https://cn.vuejs.org/v2/guide/components-dynamic-async ...
- Vue 实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案
Vue实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案 by:授客 QQ:1033553122 开发环境 Win 10 Vue 2.9.6 node-v ...
- vue + element 动态渲染、移除表单并添加验证
博客地址:https://ainyi.com/66 又接到新需求了吧~~ 背景 在一个大表单里,有可能会出现这种需求,用户可以自己操作动态添加.移除表单,更加个性化的效果. 常见于填写个人信息.附加内 ...
- Vue 中动态添加class(使用v-bind:class)
今天在Vue中动态修改类名,元素的样式就是不改变,类名也没有加上去,里面的问题具体我还是不太清楚,有可能是因为自己不认真,把 :class= 后面的内容的格式给整错了,下面将正确的做法记录一下,便于以 ...
- vue中动态加载组件+开发者模式+JS参数值传递和引用传递
今天写vue里面通过接口反参动态加载组件时候 跟着同学...学习到了 一.先说说vue 内置组件 component 的用法 component组件可以来专门用来进行组件的切换,使用is来绑定你的组件 ...
- vue中动态添加div
知识点:vue中动态添加div节点,点击添加,动态生成div,点击删除,删除对应的div,其中数组的长度是动态改变的,如在from表单中应用,直接在提交方法中,获得list,获取所填的元素即可 效果: ...
- 周记4——vue中动态添加图片无效、build上线后background-image路径问题
又是一个周五,又一周要过去了...很开心,这周遇到了vue中的一个比较常见的坑,网上随便一搜就有了很多解决方案...“幸运”的是,我选了一个带坑的方案...所以我觉得有必要记录一下这个“坑中坑”... ...
随机推荐
- txt文件覆盖恢复
1.txt文件恢复到之前保存的版本 2.电脑未重启 方式:如果你使用系统还原可以用"还原以前的版本"功能来轻松找回. 右击.txt文件-还原以前的版本-选择时间点-还原
- 企业BI智能大屏,除了页面炫酷,还能带来什么?
当我们一谈到可视化大屏,超大画面.超强科技感.酷炫的呈现效果就会出现在我们的脑海中. 所谓数据可视化,就是通过图表.图形.地图等视觉元素,将数据中所蕴含的信息的趋势.异常和模式展现出来.与传统报表相比 ...
- windows创建隐藏用户的powershell脚本
通过保存并重新注册已删除用户的注册表的方式来隐藏用户,未登录时登陆界面不可见,登陆后可见 方法详情见: https://www.k0rz3n.com/2018/06/26/windows%E6%B8% ...
- Non Super Boring Substring 题解(hash+思维)
题目链接 题目大意 给你一个长度为d(d<=1e5)的字符串,要你求有多少个子串满足这个子串不包含长度大于等于k的回文子串 题目思路 首先可以hash预处理,然后O(1)用前缀hash值和后缀h ...
- k8s集群部署rabbitmq集群
1.构建rabbitmq镜像 RabbitMQ提供了一个Autocluster插件,可以自动创建RabbitMQ集群.下面我们将基于RabbitMQ的官方docker镜像,添加这个autocluste ...
- CentOS下搭建文件共享服务
nfs部署以及优化 Server端配置 安装rpm服务包 yum install -y nfs-utils 创建数据挂载点 mkdir -p /data 编辑exports文件 vi /etc/exp ...
- 冰河教你一次性成功安装K8S集群(基于一主两从模式)
写在前面 研究K8S有一段时间了,最开始学习K8S时,根据网上的教程安装K8S环境总是报错.所以,我就改变了学习策略,先不搞环境搭建了.先通过官网学习了K8S的整体架构,底层原理,又硬啃了一遍K8S源 ...
- 20200416_Centos 7.2 在安装系统之前把数据备份出来
第一种方法: 起因: 服务器强制断电, 然后就再也启动不起来了, 进入救援模式, 一直卡死在 charoot /mnt/sysimages; 然后想在救援模式下的shell中挂载我的2T的移动硬盘, ...
- 解决右键notepad++打开时提示, ShellExecute failed (2): Is this command correct?
错误如下图: 解决方法: 右键notepad++.exe; 去掉管理员方式
- 微软面试题: LeetCode 151. 翻转字符串里的单词 出现次数:6
题目描述: 给定一个字符串,逐个翻转字符串中的每个单词. 说明: 无空格字符构成一个 单词 .输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括.如果两个单词间有多余的空格,将反转后 ...