Toggle button demo

安装 (Installation)

  • 添加包:

    $ yarn add vue-toggle-button

    $ npm install vue-toggle-button

  • 引入模块

    import ToggleButton from "vue-toggle-button";

  • 文件引入

    <!-- CDNJS :: Vue (https://cdnjs.com/) -->
    <script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js"></script>
    
    <!-- Require js -->
    <script src="//vue-toggle-button.min.js"></script>
    

  • 示例


    value: {{demo.value}}

    # HTML
    <toggle-button
      mode="checkbox"
      v-model="value"
      :options='options'></toggle-button>
    
    # JS
    Vue.component('toggle-button', VueToggleButton.toggleButton)
    const vm = new Vue({
      el: "#app",
      data() {
        return {
          options: [
            {label: "Active", value: 'active'},
            {label: "Deactive", value: 'deactive'}
          ]
          value: 'active'
        };
      }
    });
    

按钮切换

  • 尺寸

    <toggle-button size="sm"></toggle-button>

    <toggle-button size=""></toggle-button>

    <toggle-button size="lg"></toggle-button>

  • 样式设置

    <toggle-button :toggle='{checked: "info", unchecked: "dark"}'></toggle-button>

    <toggle-button :toggle='{checked: "rgb(187, 153, 205)", unchecked: "rgb(191, 203, 217)"}'></toggle-button>

    <toggle-button :options='[{label: "Offline", value: 0, "checked": "warning"}, {label: "Online", value: 1, "checked": "success"}]'></toggle-button>

  • 是否可用

    <toggle-button disabled></toggle-button>

复选框切换

  • 尺寸

    <toggle-button mode="checkbox" :options='[]' size="sm"></toggle-button>

    <toggle-button mode="checkbox" :options='[]'></toggle-button>

  • 样式设置

    <toggle-button mode="checkbox" :toggle='{checked: "info", unchecked: "dark"}'></toggle-button>

    <toggle-button mode="checkbox" :toggle='{checked: "rgb(187, 153, 205)", unchecked: "rgb(191, 203, 217)"}' :options='[{label: "Offline", value: 0}, {label: "Online", value: 1}]'></toggle-button>

  • 是否可用

    <toggle-button mode="checkbox" disabled></toggle-button>

Function

  • 改变前回调方法

      HTML
      <toggle-button
        v-model="value"
        mode="checkbox"
        size="sm"
        :options='options'
        :before="changeBefore"></toggle-button>
    
      JS
      const vm = new Vue({
        data() {
          return {
            value: false,
            options: [
              {label: "Active", value: false},
              {label: "Deactive", value: true}
            ]
          };
        },
        methods: {
          /**
          * 改变前回调
          *
          * @param obj.value 改变后值
          * @param obj.event 当前对象
          *
          * @return Boolean true=修改当前值  false=不修改当前值
          */
          changeBefore(obj) {
            var value = obj.value;
            var event = obj.event;
            
            if (confirm('改变后状态是' + value + ', 确认修改?')) {
              return true;
            } else {
              return false;
            }
          }
        }
      });
    

  • 改变回调方法

      HTML
      <toggle-button
        v-model="value"
        size="sm"
        :options='options'
        @change="change"></toggle-button>
    
      JS
      const vm = new Vue({
        data() {
          return {
            value: false,
            options: [
              {label: "Deactive", value: false, checked: "warning"},
              {label: "Active", value: true, checked: "success"}
            ]
          };
        },
        methods: {
          change(obj) {
            var value = obj.value; // 改变后的值
            var event = obj.event; // 当前操作对象
            alert(value);
          }
        }
      });
    

Props


  /**
  * 模式
  *
  * @type {String}
  * 
  * @required false
  *
  * `group` bootstrap `btn-group`样式
  * `checkbox` 复选框样式
  */
  mode: {
    type: String,
    required: false,
    default: 'group' // group|checkbox
  },
  /**
  * 绑定数据
  *
  * @type {mixed}
  *
  * @required true
  */
  value: {
    type: null,
    required: true,
    default: 0
  },
  /**
  * 回传数据 (透传数据)
  *
  * @type {mixed}
  *
  * @required false
  */
  data: {
    type: null,
    required: false,
    default: ''
  },
  /**
  * 选择数据
  *
  * @type {Array}
  * 
  * @required true
  *
  * @example [
  *     {label: "Left", value: 1, checked: "primary"},
  *     {label: "Middle", value: 2, checked: "info"},
  *     {label: "Right", value: 3}
  * ]
  * label: 标签描述
  * value: 标签值
  * checked: 选中样式
  */
  options: {
    type: Array,
    required: true
  },
  /**
  * 样式设置
  * 
  * @type {Object}
  * 
  * @required false
  * 
  * @example {checked: "success", unchecked: "secondary"}
  * checked: 选中样式
  * unchecked: 未选中样式
  * 
  * bootstrap3 default|primary|success|info|warning|danger
  * bootstrap4 primary|secondary|success|danger|warning|info|light|dark
  *
  * 自定义颜色 rgb(187, 153, 205)|red|#000000
  */
  toggle: {
    type: Object,
    required: false,
    default: () =>{
      return { checked: "success", unchecked: "secondary" };
    } 
  },
  /**
  * 尺寸
  * 
  * @type {String}
  * 
  * @required false
  * 
  * @example ''|sm|lg
  */
  size: {
    type: String,
    required: false,
    default: ''
  },
  /**
  * 是否可用
  * 
  * @type {Boolean}
  * 
  * @required false
  * 
  * @example true|false
  */
  disabled: {
    type: Boolean,
    required: false,
    default: false
  },
  /**
  * 改变前回调方法
  *
  * @type {Function}
  *
  * @required false
  *
  * @param value 改变后值
  * @param event 当前对象
  */
  before: {
    type: Function,
    required: false,
  }