Files
bsmall/node_modules/mini-ali-ui/es/am-checkbox/index.js
2020-09-24 11:08:03 +08:00

52 lines
1.4 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import fmtEvent from '../_util/fmtEvent';
/**
* 对齐 ant design checkbox 的设计,增加 ctrlChecked 属性
* 当 props 中有 checked 传入时am-checkbox 是非受控组件
* 当 props 中不传入 checked 而使用 ctrlChecked 时am-checkbox 是受控组件
*/
Component({
props: {
value: '',
checked: false,
ctrlChecked: undefined,
disabled: false,
onChange: function onChange() {},
id: ''
},
data: {
// 组件内维护的 chackbox 勾选状态
_checked: false
},
onInit: function onInit() {
var checked = this.props.checked;
this.setData({
_checked: checked
});
},
// props 改变时
deriveDataFromProps: function deriveDataFromProps(nextProps) {
var _checked = this.data._checked;
var oldChecked = this.props.ctrlChecked;
var ctrlChecked = nextProps.ctrlChecked; // oldChecked===undefined 说明未传入 checked 属性am-checkbox 将成为不受控组件
// oldChecked 有传入值 _checked 受外部 checked 属性控制
if (_checked !== ctrlChecked && oldChecked !== undefined) {
this.setData({
_checked: ctrlChecked
});
}
},
methods: {
onChange: function onChange(e) {
var _e$detail = e.detail,
detail = _e$detail === void 0 ? {} : _e$detail;
var value = detail.value;
this.setData({
_checked: value
});
var event = fmtEvent(this.props, e);
this.props.onChange(event);
}
}
});