BaseMixin.js 1.8 KB

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