vue組件 下拉框分頁(yè)

上圖 ??
下拉框分頁(yè).png

和公司簽了保密協(xié)議啊哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈所以我把數(shù)據(jù)全部馬賽克了哈哈哈哈哈哈哈哈哈哈哈尼萌就當(dāng)有就成~~
輸入框前面有個(gè)label匀泊,和頁(yè)面中的其他label保持一致否灾;分頁(yè)的組件是vue-element-admin中自帶的pagination沛贪,用elementui的el-pagination也可~~一樣的道理反正就是各種傳值

組件內(nèi)容 ↓

<template>
  <div class="container-select">
    <!-- 這部分是label -->
    <span class="title-label" :style="{ width: labelWidth }">{{ label }}</span>
    <!-- 這部分是點(diǎn)擊輸入框跳出來(lái)的分頁(yè)小彈窗 -->
    <el-popover placement="bottom" trigger="click" v-model="visible">
      <el-table
        size="mini"
        :data="list"
        highlight-current-row
        @row-click="changeTableRow"
        v-loading="listLoading"
      >
        <el-table-column
          :prop="nameProp"
          :label="nameLabel"
          align="center"
          show-overflow-tooltip
        ></el-table-column>
        <el-table-column
          v-if="other"
          :prop="otherProp"
          :label="otherLabel"
          align="center"
        ></el-table-column>
      </el-table>
      <small-pagination
        :total="total"
        :page.sync="params.pageNum"
        :limit.sync="params.pageSize"
        @pagination="getList"
      />
      <el-input
        v-model="inputValue"
        :placeholder="placeholder"
        clearable
        slot="reference"
        @input="onChange"
      ></el-input>
    </el-popover>
  </div>
</template>

<script>
// 這是分頁(yè)組件逞盆。。用el-pagination也可以
import smallPagination from "@/components/Pagination/withoutNumber.vue";

export default {
  components: {
    smallPagination,
  },
  props: {
    labelWidth: {
      type: String,
      default: "70px",
    },
    label: {
      type: String,
      default: "機(jī)構(gòu)名稱:",
    },
    // 控制popover顯隱的屬性
    visible: {
      type: Boolean,
      default: false,
    },
    // 列表數(shù)據(jù)
    list: {
      type: Array,
      default: () => {
        return [];
      },
    },
    // 列表loading
    listLoading: {
      type: Boolean,
      default: false,
    },
    // 列表屬性1
    nameProp: {
      type: String,
      default: "",
    },
    // 列表label 1
    nameLabel: {
      type: String,
      default: "機(jī)構(gòu)名稱",
    },
    // 另一個(gè)屬性把将。有就為true焰枢,妹有就false
    // 這頁(yè)只顯示一列機(jī)構(gòu)名兒,別的頁(yè)面有時(shí)會(huì)要求顯示電話啊啥的
    other: {
      type: Boolean,
      default: false,
    },
    otherProp: {
      type: String,
      default: "",
    },
    otherLabel: {
      type: String,
      default: "機(jī)構(gòu)聯(lián)系電話",
    },
    // 分頁(yè)所需參數(shù)
    params: {
      type: Object,
      default: () => {},
    },
    // 輸入框內(nèi)容
    inputValue: {
      type: String,
      default: "",
    },
    placeholder: {
      type: String,
      default: "請(qǐng)選擇機(jī)構(gòu)",
    },
    total: {
      type: Number,
      default: 0,
    },
  },
  methods: {
    // 點(diǎn)擊行
    changeTableRow(row) {
      this.inputValue = row[this.nameProp];  // input中顯示列表中選擇的數(shù)據(jù)
      this.code = row[this.otherProp];  // 保存選中行的code
      this.visible = false;  // 選中行則popover消失
    },
    // 獲取數(shù)據(jù)
    getList() {
      this.$emit("getList", this.params);
    },
    // 改變input值
    onChange(value) {
      if (value == "") {
        this.code = "";
      }
      this.$emit("onChangeOrganizeValue", value);
    },
  },
};
</script>

<style lang="scss" scoped>
.el-input {
  width: 140px;
}
.title-label {
  display: inline-block;
  text-align: right;
  color: #606266;
  font-size: 14px;
  font-weight: bold;
}
.popover {
  background: red;
}
</style>

父組件 ??
template 中 ↓

        <el-form-item>
          <select-pagination
            :list="agencyList"
            :listLoading="agencyLoading"
            :nameProp="'name'"
            :params="agency"
            :other="false"
            :total="totalAgency"
            @getList="getAgency"
            @onChangeOrganizeValue="changeAgencyInput"
          ></select-pagination>
        </el-form-item>

script 中 ↓

<script>
import SelectPagination from "@/components/selectPagination/selectPagination";

export default {
  data() {
    return {
      agencyList: [], // 放數(shù)據(jù)的數(shù)組兒
      // 請(qǐng)求參數(shù)
      agency: {
        pageNum: 1,
        pageSize: 8,
        condition: "",  // 輸入框兒輸入申請(qǐng)符合條件的數(shù)據(jù)
      },
      totalAgency: 0, // 分頁(yè)的總數(shù)兒
      agencyLoading: false,  // 列表兒的loading圈兒~
    };
  },
  methods: {
    getAgency() {
      this.agencyLoading = true;
      //  getAgencyList 為接口名兒
      // this.agency是請(qǐng)求參數(shù)的對(duì)象兒
      getAgencyList(this.agency).then((res) => {
        if (res.code == 200 && res.success) {
          this.agencyList = res.content;
          this.totalAgency = res.totalCount;
          this.agencyLoading = false;
        } else {
          this.$message("暫無(wú)機(jī)構(gòu)");
          this.agencyList = [];
          this.totalAgency = 0;
          this.agencyLoading = false;
        }
      });
    },
    changeAgencyInput(value) {
      if (value == "") { 
        // 如果輸入框兒為空則清空之前選中機(jī)構(gòu)后賦值的參數(shù)
        this.listQuery.code = "";
        this.agency.condition = "";
        this.getAgency();
      } else {
        // 賦值
        this.agency.condition = value;
        this.getAgency();
      }
    },
  },
  mounted() {
    this.getAgency();
  },
  components: { SelectPagination },
};
</script>

最后叮囑一句徽级,最好不要直接在父組件中控制子組件的inputValue气破。會(huì)有很多問(wèn)題都是血的教訓(xùn)哈哈哈哈哈哈哈

如果現(xiàn)在有二級(jí)聯(lián)動(dòng)的需求,選擇左邊的數(shù)據(jù)餐抢,更改右邊的數(shù)據(jù)现使。
那么點(diǎn)擊左側(cè)的列表選定一個(gè)值,右側(cè)才可以進(jìn)行操作旷痕。左側(cè)換值碳锈,右側(cè)清空。
這個(gè)時(shí)候欺抗,我們不要直接用inputValue來(lái)操縱輸入框的值售碳。最好再設(shè)置一個(gè)其他的變量,比如flag绞呈。

如果左邊傳的值發(fā)生變化贸人,父組件中的this.flag = !this.flag
在子組件中watch這個(gè)flag

watch: {
  flag(n,o) {
    if(n != o) {
      this.inputValue = '';
    }
  }
}

tada~~~一個(gè)下拉框分頁(yè)的組件就完成啦~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市佃声,隨后出現(xiàn)的幾起案子艺智,更是在濱河造成了極大的恐慌,老刑警劉巖圾亏,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件十拣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡召嘶,警方通過(guò)查閱死者的電腦和手機(jī)父晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)弄跌,“玉大人甲喝,你說(shuō)我怎么就攤上這事☆踔唬” “怎么了埠胖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)淳玩。 經(jīng)常有香客問(wèn)我直撤,道長(zhǎng),這世上最難降的妖魔是什么蜕着? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任谋竖,我火速辦了婚禮红柱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓖乘。我一直安慰自己锤悄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布嘉抒。 她就那樣靜靜地躺著零聚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪些侍。 梳的紋絲不亂的頭發(fā)上隶症,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音岗宣,去河邊找鬼蚂会。 笑死,一個(gè)胖子當(dāng)著我的面吹牛狈定,可吹牛的內(nèi)容都是我干的颂龙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼纽什,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了躲叼?” 一聲冷哼從身側(cè)響起芦缰,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枫慷,沒(méi)想到半個(gè)月后让蕾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡或听,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年探孝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誉裆。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顿颅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出足丢,到底是詐尸還是另有隱情粱腻,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布斩跌,位于F島的核電站绍些,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏耀鸦。R本人自食惡果不足惜柬批,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氮帐,春花似錦嗅虏、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至奄容,卻和暖如春冰更,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昂勒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蜀细, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戈盈。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓奠衔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親塘娶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子归斤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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