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) 
}
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ElementUITabs标签可以通过动态绑定数据来实现动态切换标签的效果。具体实现方法如下: 1. 在Vue组件中定义一个数组,用于存储标签的数据,例如: ``` data() { return { tabs: [ { label: '标签1', name: 'tab1' }, { label: '标签2', name: 'tab2' }, { label: '标签3', name: 'tab3' } ], activeTab: 'tab1' } } ``` 2. 在模板中使用`el-tabs`和`el-tab-pane`组件来渲染标签,例如: ``` <el-tabs v-model="activeTab"> <el-tab-pane v-for="tab in tabs" :key="tab.name" :label="tab.label" :name="tab.name"> {{ tab.label }} 的内容 </el-tab-pane> </el-tabs> ``` 3. 在需要动态切换标签的时候,修改`activeTab`的值即可,例如: ``` this.activeTab = 'tab2'; ``` 这样就可以实现动态切换标签的效果了。 ### 回答2: ElementUI是一款非常受欢迎的基于Vue.js开发的前端UI框架。其中的Tabs组件让我们可以方便地组织和切换多个界面功能,极大地提高了Web应用程序的交互性和用户体验。其中包含了许多可配置的属性和方法,我们可以使用它们来实现一些非常有趣的交互效果。 ElementUITabs组件提供了两种标签类型:固定标签和可滚动标签。在固定标签模式下,标签宽度是固定的,如果标签过多,那么会出现切换不方便的问题。而在可滚动标签模式下,标签会自动适应父容器的宽度,并且在标签过多时,在标签列表右侧会显示左右滚动按钮,以方便用户切换标签ElementUITabs组件还提供了动态添加和删除标签的功能。我们可以使用addTab和removeTab方法在运行时添加或删除标签。addTab方法接收一个包含标签相关信息的对象作为参数,包括标签标题、图标、内容等等。removeTab方法则接收一个标签的key值作为参数,用于标识要删除的标签。 除了这些基本的功能,ElementUITabs组件还提供了许多其他的配置项和事件。例如:可以使用tabPosition属性来指定标签的位置(上、下、左、右),可以使用editable属性来开启或关闭标签编辑功能,可以使用tabClick事件来监听标签点击事件等等。这些特性让Tabs组件非常灵活,可以满足各种复杂的业务场景需求。 总的来说,ElementUITabs组件是一个非常强大的标签组件,可以帮助我们轻松地实现多标签应用程序,并提供各种可配置的功能和事件响应。如果您正在开发Web应用程序,并且需要使用到标签功能,ElementUITabs组件将是您不错的选择。 ### 回答3: ElementUI是一个非常流行的Vue.js UI组件库,其中之一的Tabs标签组件可以用于创建标签视图和动态添加或删除标签Tabs标签组件是由一个<el-tabs>组件和一个或多个<el-tab-pane>组成的。 首先,在Vue组件中引入以下内容,使标签组件能够正常工作: ```javascript import { Tabs, TabPane } from 'element-ui' Vue.use(Tabs) Vue.use(TabPane) ``` 然后,我们可以在模板中添加以下内容创建一个基本的标签组件: ```javascript <el-tabs v-model="activeName" @tab-click="handleClick"> <el-tab-pane v-for="(item, index) in tabs" :key="index" :label="item.name">{{ item.content }}</el-tab-pane> </el-tabs> ``` 在上述代码中,v-model属性用于绑定当前激活的选项卡的名称,@tab-click事件用于处理标签单击事件。 为了实现动态添加和删除标签的功能,我们需要使用一个数组来存储标签对象,并设置一个指针来跟踪当前激活的标签。每次添加或删除标签时,都需要更新数组并更新指针。 以下是一个示例组件,演示了如何添加和删除标签: ```javascript <template> <div> <div> <el-button @click="addTab">添加标签</el-button> <el-button @click="removeTab">删除标签</el-button> </div> <el-tabs v-model="activeName" editable> <el-tab-pane v-for="(item, index) in tabs" :key="index" :label="item.name">{{ item.content }}</el-tab-pane> </el-tabs> </div> </template> <script> export default { data() { return { activeName: 'tab1', tabs: [ { name: '标签1', content: '这是标签1的内容', id: 'tab1' }, { name: '标签2', content: '这是标签2的内容', id: 'tab2' } ] } }, methods: { addTab() { const newTabName = `tab${this.tabs.length + 1}` this.tabs.push({ name: `标签${this.tabs.length + 1}`, content: `这是标签${this.tabs.length + 1}的内容`, id: newTabName }) this.activeName = newTabName }, removeTab() { const tabs = this.tabs const activeName = this.activeName let removeIndex = tabs.findIndex(tab => tab.id === activeName) if (removeIndex === -1) { return } tabs.splice(removeIndex, 1) this.activeName = tabs.length ? tabs[removeIndex > 0 ? removeIndex - 1 : 0].id : '' } } } </script> ``` 上述代码中,addTab方法用于向tabs数组中添加一个新标签对象,并将其设置为当前激活的标签。removeTab方法将从tabs数组中删除当前激活的标签对象,并将activeName更新为上一个标签或第一个标签,如果没有标签,则将activeName设置为空字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一介青烟小生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值