Element Ui el-tabs掛組件使用

需求:
在列表頁贱田,展示表格缅茉,通過點(diǎn)擊右上角的新增,在打開一個(gè)tabs頁男摧,是新增蔬墩;
在列表頁表格的操作列表點(diǎn)擊詳情,再打開一個(gè)tabs頁耗拓,是詳情拇颅;
在列表頁表格的操作列表點(diǎn)擊編輯,再打開一個(gè)tabs頁乔询,是編輯樟插;
在新增頁面,最下面有編輯按鈕
每個(gè)打開的頁面都有關(guān)閉按鈕
以上的需求竿刁,element ui的標(biāo)簽頁的功能可以滿足
但是el-tabls 在v-for里面只支持字符串

index.vue 主頁面

<div class="oneBlock">
          <div class="searchCondition" style="display: none">
            <el-row :gutter="10" class="elRow">
              <el-col :span="3" class="labelLeft">名稱:</el-col>
              <el-col :span="5">
                  <el-input size="mini" placeholder="請(qǐng)輸入" v-model="a" clearable=""></el-input>
              </el-col>
                <el-col :span="8">
                    <div class="textAlignRight">
                        <el-button size="mini" type="primary" class=" " icon="el-icon-search" @click="query">查詢</el-button>
                    </div>
                </el-col>
            </el-row>
          </div>
        </div>
        <div class="oneBlock">
            <el-tabs v-model="editableTabsValue"  @tab-remove="removeTab">
                <el-tab-pane
                        v-for="item in editableTabs"
                        :closable="item.close"
                        :key="item.name"
                        :label="item.title"
                        :name="item.name">
                    <component v-bind:is="item.content" ref="child" @toFu = goAddTab @toFuClose = closeZi></component>
                </el-tab-pane>
            </el-tabs>
        </div>

list.vue 表格頁

 <div class="oneBlock">
        <el-row :gutter="10" class="elRow">
            <el-col :span="24">
                <div class="textAlignRight" style="margin-bottom: 20px">
                    <el-button size="mini"  @click="addSite">新增</el-button>
                </div>
            </el-col>
        </el-row>
        <div class="elTable">
            <el-table
                    ref="tableInsData.multipleTable"
                    v-loading="tableInsData.tableLoading"
                    :data="tableInsData.tableData"
                    tooltip-effect="light"
                    stripe
                    style="width: 100%">
                <el-table-column :show-overflow-tooltip="true" align="center" prop="" min-width="130px" label="編號(hào)">
                    <template slot-scope="scope">
                        <div class="opera" @click="handleDetails(scope.row.id)">{{}}</div>
                    </template>
                </el-table-column>
                <el-table-column :show-overflow-tooltip="true" align="center" prop="" min-width="180px" label="名稱"></el-table-column>
                <el-table-column :show-overflow-tooltip="true" align="center" fixed="right"  min-width="160px" label="操作" >
                    <template slot-scope="scope">
                        <el-button type="text" class="" size="small" @click="tableEditInfo(scope.row.id)" >編輯</el-button>
                        <el-button type="text" class="" size="small" @click="tableDelInfo(scope.row.id)" >刪除</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <div class="elPagination" v-if="tableInsData.tableData.length !== 0" style="margin-top: 50px">
                <el-pagination
                        @size-change="handleSizeChange"
                        @current-change="handleCurrentChange"
                        :current-page="tableInsData.currentPage"
                        :page-sizes="tableInsData.pageSizes"
                        :page-size="tableInsData.pageSize"
                        layout="total, ->,prev, pager, next, sizes, jumper"
                        :total="tableInsData.pageTotal">
                </el-pagination>
            </div>
        </div>

edit.vue 編輯頁,新增頁,詳情頁 通過父組件傳過來的字段flag確定

           <div class="searchCondition">
                <el-row :gutter="10" class="elRow">
                   <p class="title">基礎(chǔ)信息</p>
                </el-row>
                <el-row :gutter="10" class="elRow">
                    <el-col :span="5" class="labelLeft must">編碼:</el-col>
                    <el-col :span="5">
                        <p class="details" v-if="flag !== 'add'">{{form.code}}</p>
                        <el-input size="mini"  v-else placeholder="請(qǐng)輸入" v-model="form.code" @blur="checkIsCode"></el-input>
                    </el-col>
                </el-row>
                <el-row :gutter="10" class="elRow" style="text-align: center">
                    <el-button type="primary" size="mini" @click="edit" v-show="flag === 'details'">編輯</el-button>
                    <el-button type="primary" size="mini" @click="close">關(guān)閉</el-button>
                    <el-button type="primary" size="mini" v-show="flag !== 'details'" @click="save" :loading="isLoading">保存</el-button>
                </el-row>
            </div>

具體里面的邏輯不涉及黄锤,主要分析一下場(chǎng)景交互
一、index.vue頁循環(huán)需要展示的tabs標(biāo)簽頁

      editableTabsValue: '1',
      editableTabs: [{
        title: '電子圍欄',
        name: '1',
        content: 'tableList'
      }],
      tabIndex: 1,

數(shù)組默認(rèn)首先展示的是列表頁食拜,并且列表頁永遠(yuǎn)在第一頁鸵熟,且沒有關(guān)閉按鈕
二、list.vue頁在點(diǎn)新增按鈕的時(shí)候负甸,需要向父組件發(fā)送

    addSite () {
      this.$emit('toFu', {
        next: 'add',
        id: 'empty'
      })
    },

三流强、index.vue需要接收數(shù)據(jù)判斷,并且向子組件edit.vue發(fā)送信息惑惶,告訴對(duì)方
當(dāng)前是add/edit/details煮盼,這是第幾個(gè)打開的窗口(因?yàn)槊總€(gè)頁面自帶關(guān)閉按鈕短纵,需要這個(gè)數(shù)字)带污,id(詳情頁和編輯頁需要這個(gè)id去調(diào)接口)

    goAddTab (info) {
      if (info.next === 'add') {
        this.addTab(this.editableTabsValue, '新建', info.next, info.id)
      } else if (info.next === 'edit') {
        this.addTab(this.editableTabsValue, '編輯', info.next, info.id)
      } else if (info.next === 'details') {
        this.addTab(this.editableTabsValue, '查看', info.next, info.id)
      }
    },
    addTab (targetName, title, opera, data) {
      let newTabName = ++this.tabIndex + ''
      this.editableTabs.push({
        title,
        name: newTabName,
        content: 'edit',
        close: 'closable'
      })
      this.editableTabsValue = newTabName

      this.$nextTick(function () {
        this.$refs.child[this.$refs.child.length - 1].toEdit(opera, newTabName, data)
      })
    },

四、edit頁需要接收數(shù)據(jù) 如果不是新增頁就需要調(diào)接口 flag接收的是edit/add/details
time接收的是當(dāng)前是第幾頁香到,id接收的是詳情頁調(diào)接口需要的參數(shù)

    toEdit (message, time, id) {
      this.flag = message
      this.time = time
      this.id = id
      if (this.id !== 'empty') {
        this.getList()
      }
    },

注:每次新增或者修改的保存調(diào)用接口成功的時(shí)候鱼冀,需要向list.vue列表組件發(fā)送一個(gè)消息,告訴它消息更新了悠就,需要刷新列表千绪,,可以使用

bus.$emit('refresh', '1')   
bus.$on('refresh', (message) => {
      if (message === '1') {
        this.loadTableData(1, 10)
      }
 })

五梗脾、在edit.vue里面點(diǎn)擊關(guān)閉按鈕的時(shí)候荸型,需要把當(dāng)前的頁面位置告訴index.vue

 this.$emit('toFuClose', {
        times: this.time
  })

// index.vue
   closeZi (info) {
      this.removeTab(info.times)
    },
   removeTab (targetName) {
      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)
    },

六、最后還有一個(gè)就是index.vue頁點(diǎn)查詢按鈕的時(shí)候炸茧,需要發(fā)送給list.vue同時(shí)不管此時(shí)在哪個(gè)頁面都跳回第一個(gè)頁面列表頁

    query () {
      // this.$refs.child[0].toList(this.teamName, this.teamLeaderName)
      this.$refs.child[0].toList(這里面寫需要查詢的字段) 
      this.editableTabsValue = '1'
    }
   // list.vue
    toList (這里接收傳過來的查詢條件) {
      this.loadTableData(1, 10)
    },
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瑞妇,一起剝皮案震驚了整個(gè)濱河市稿静,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辕狰,老刑警劉巖改备,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蔓倍,居然都是意外死亡悬钳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門偶翅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來默勾,“玉大人,你說我怎么就攤上這事倒堕≡植猓” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵垦巴,是天一觀的道長媳搪。 經(jīng)常有香客問我,道長骤宣,這世上最難降的妖魔是什么秦爆? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮憔披,結(jié)果婚禮上等限,老公的妹妹穿的比我還像新娘。我一直安慰自己芬膝,他們只是感情好望门,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锰霜,像睡著了一般筹误。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上癣缅,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天厨剪,我揣著相機(jī)與錄音,去河邊找鬼友存。 笑死祷膳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屡立。 我是一名探鬼主播直晨,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了勇皇?” 一聲冷哼從身側(cè)響起奕巍,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儒士,沒想到半個(gè)月后的止,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡着撩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年诅福,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拖叙。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氓润,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薯鳍,到底是詐尸還是另有隱情咖气,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布挖滤,位于F島的核電站崩溪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏斩松。R本人自食惡果不足惜伶唯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惧盹。 院中可真熱鬧乳幸,春花似錦、人聲如沸钧椰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫡霞。三九已至瓶埋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秒际,已是汗流浹背悬赏。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工狡汉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留娄徊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓盾戴,卻偏偏與公主長得像寄锐,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程橄仆,因...
    小菜c閱讀 6,365評(píng)論 0 17
  • UI組件 element- 餓了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的組件庫 m...
    35eeabfa0772閱讀 3,262評(píng)論 7 12
  • UI組件 element - 餓了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的組...
    魯大師666閱讀 43,369評(píng)論 5 97
  • 基于Vue的一些資料 內(nèi)容 UI組件 開發(fā)框架 實(shí)用庫 服務(wù)端 輔助工具 應(yīng)用實(shí)例 Demo示例 element★...
    嘗了又嘗閱讀 1,142評(píng)論 0 1
  • 堅(jiān)持 要么選擇前行剩膘,要么選擇養(yǎng)生。 我選擇讓你們進(jìn)步盆顾,無論多難怠褐。 謝謝孩子們,謝謝你們的懂事的和不懂事的爸爸媽媽您宪,...
    雨風(fēng)兼程閱讀 189評(píng)論 0 0