BaseMixin.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import { nextTick } from 'vue';
  3. import { getOptionProps } from './props-util';
  4. export default {
  5. methods: {
  6. setState() {
  7. let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  8. let callback = arguments.length > 1 ? arguments[1] : undefined;
  9. let newState = typeof state === 'function' ? state(this.$data, this.$props) : state;
  10. if (this.getDerivedStateFromProps) {
  11. const s = this.getDerivedStateFromProps(getOptionProps(this), _extends(_extends({}, this.$data), newState));
  12. if (s === null) {
  13. return;
  14. } else {
  15. newState = _extends(_extends({}, newState), s || {});
  16. }
  17. }
  18. _extends(this.$data, newState);
  19. if (this._.isMounted) {
  20. this.$forceUpdate();
  21. }
  22. nextTick(() => {
  23. callback && callback();
  24. });
  25. },
  26. __emit() {
  27. // 直接调用事件,底层组件不需要vueTool记录events
  28. // eslint-disable-next-line prefer-rest-params
  29. const args = [].slice.call(arguments, 0);
  30. let eventName = args[0];
  31. eventName = `on${eventName[0].toUpperCase()}${eventName.substring(1)}`;
  32. const event = this.$props[eventName] || this.$attrs[eventName];
  33. if (args.length && event) {
  34. if (Array.isArray(event)) {
  35. for (let i = 0, l = event.length; i < l; i++) {
  36. event[i](...args.slice(1));
  37. }
  38. } else {
  39. event(...args.slice(1));
  40. }
  41. }
  42. }
  43. }
  44. };