zoukankan      html  css  js  c++  java
  • 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 {
       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>
    
    
    
  • 相关阅读:
    纯CSS3实现3D动画导航,html5 webRTC技术实现免费网页电话拨打
    Base64编解码Android和ios的例子,补充JNI中的例子
    新春寄语
    彩票号码OC呈现
    iOS CFNetwork报错
    Android常用库
    高性能服务端访问设计
    Tomcat的ISO-8859-1
    迅达云s3cmd客户端mac平台部署说明
    Android.os.NetworkOnMainThreadException
  • 原文地址:https://www.cnblogs.com/victor-leeson/p/10708057.html
Copyright © 2011-2022 走看看