| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { use } from '../utils';
- import { CheckboxMixin } from '../mixins/checkbox';
- const [sfc, bem] = use('checkbox');
- export default sfc({
- mixins: [CheckboxMixin('van-checkbox-group', bem)],
- computed: {
- checked: {
- get() {
- return this.parent ? this.parent.value.indexOf(this.name) !== -1 : this.value;
- },
- set(val) {
- if (this.parent) {
- this.setParentValue(val);
- } else {
- this.$emit('input', val);
- }
- }
- }
- },
- watch: {
- value(val) {
- this.$emit('change', val);
- }
- },
- methods: {
- toggle() {
- const checked = !this.checked;
- // When toggle method is called multiple times at the same time,
- // only the last call is valid.
- // This is a hack for usage inside Cell.
- clearTimeout(this.toggleTask);
- this.toggleTask = setTimeout(() => {
- this.checked = checked;
- });
- },
- onClickIcon() {
- if (!this.isDisabled) {
- this.toggle();
- }
- },
- onClickLabel() {
- if (!this.isDisabled && !this.labelDisabled) {
- this.toggle();
- }
- },
- setParentValue(val) {
- const { parent } = this;
- const value = parent.value.slice();
- if (val) {
- if (parent.max && value.length >= parent.max) {
- return;
- }
- /* istanbul ignore else */
- if (value.indexOf(this.name) === -1) {
- value.push(this.name);
- parent.$emit('input', value);
- }
- } else {
- const index = value.indexOf(this.name);
- /* istanbul ignore else */
- if (index !== -1) {
- value.splice(index, 1);
- parent.$emit('input', value);
- }
- }
- }
- }
- });
|