vue自定义控件

vue


vue">

<!--弹窗多选控件-->

<template>

<cell

style="min-height:3em"

primary="content"

value-align="left"

:title="title"

is-link

@click.native="handleCellClick"

:disabled="disabled"

>

<p class="cellText">{{checked_list|arrToString|keysToValuesConverter(options)}}</p>

<div v-transfer-dom>

<popup v-model="isPopVisible" :popup-style="{zIndex: 505,'border-top':'1px solid #E1E1E1','max-height':'80%'}">

<div>

<checker

v-model="checked_list"

@on-change="selectedChanged"

type="checkbox"

class="popupChecker"

default-item-class="checker-item"

selected-item-class="checker-item-selected"

>

<checker-item v-for="item in options" :key="item.key" :value="item.key">{{item.value}}</checker-item>

</checker>

</div>

</popup>

</div>

</cell>

</template>

<script>

const COMPONENT_NAME = "PopupChecker";

import { Cell, Popup, Checker, CheckerItem } from "vux";

export default {

name: COMPONENT_NAME,

components: { Cell, Popup, Checker, CheckerItem },

props: {

value: {//对应v-model

type: Array,

default: []

},

options: {

type: Array,

default: []

},

title: {

type: String,

default: null

},

disabled: {

type: Boolean,

default: false

},

isPopShow: {

type: Boolean,

default: false

}

},

data() {

return {

checked_list: [],

isPopVisible: false

};

},

watch: {

value(val) {

this.checked_list = val;

},

isPopShow(val) {

this.isPopVisible = val;

},

isPopVisible(val) {

this.$emit("update:isPopShow", val); //事件实现双向绑定

}

},

methods: {

handleCellClick() {

if (!this.disabled) {

this.isPopVisible = true;

}

},

selectedChanged() {

this.$emit("input", this.checked_list);//事件实现双向绑定

}

},

filters: {

arrToString(checked_list) {

if (checked_list != null) {

return checked_list.join(",");

} else {

return "";

}

}

}

};

</script>

<style lang="less" scoped>

.cellText {

width: 100%;

height: auto;

word-wrap: break-word;

word-break: break-all;

overflow: hidden;

}

.popupChecker {

padding: 0.5em;

display: flex;

justify-content: space-between;

flex-wrap: wrap;

align-items: center;

align-content: center;

> * {

flex: auto;

margin: 0.5em 1em;

text-align: center;

}

}

.checker-item {

background-color: #ddd;

color: #222;

font-size: 14px;

padding: 5px 10px;

margin-right: 10px;

line-height: 18px;

border-radius: 15px;

}

.checker-item-selected {

background-color: #ff3b3b;

color: #fff;

}

</style>

以上是 vue自定义控件 的全部内容, 来源链接: utcz.com/z/378038.html

回到顶部