UNPKG

nimble-ui

Version:
79 lines (77 loc) 2.47 kB
import { callFn } from 'nimble-lib'; /** * 实现双向绑定的mixin * * @param {Object} options 选项 * @param {Function} options.myValueInit 初始化时候的值 * @param {Function} options.mValueChange mValue变化时的回调,返回false表示不执行自动赋myValue值 * @param {Function} options.myValueChange myValue变化时的回调,返回false表示不执行自动emit值 * @export * @returns {Object} */ export default function vModel(options) { options = options || {}; let attrName = 'mValue'; let _myName = 'myValue'; return { model: { prop: attrName, event: 'valueChange' }, props: { /** * 当前的值 */ mValue: options.value || {} }, data() { let _that = this; let data = { myValue: callFn(options.myValueInit || _that.mValue, [_that.mValue], _that) }; if (_that.$options.propsData[attrName] === undefined && data[_myName] !== undefined) { _that._valueChange(); } return data; }, watch: { /** * 监听mValue的变化 * @param {any} nowVal mValue变化后的值 * @param {any} oldVal mValue变化前的值 */ mValue (nowVal, oldVal) { let _that = this; let res = callFn(options.mValueChange, [nowVal, oldVal], _that); if (res !== false) { _that.myValue = nowVal; } }, /** * 监听myValue的变化 * @param {any} nowVal 变化后数据 * @param {any} oldVal 变化前的值 */ myValue (nowVal, oldVal) { let _that = this; let res = callFn(options.myValueChange, [nowVal, oldVal], _that); if (res !== false) { _that._valueChange(); } } }, methods: { /** * 提交值变化的时候的事件 * @param {Event} evt 事件对像 */ _valueChange (evt) { let _that = this; if (evt === undefined) { evt = _that.myValue; } _that.$emit('valueChange', evt); } } }; }