index.vue 871 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <template>
  2. <span>{{ value || "- -" }}</span>
  3. </template>
  4. <script>
  5. export default {
  6. name: "ComputedInput",
  7. props: {
  8. // v-model
  9. value: {
  10. type: [Number, String],
  11. require: true,
  12. },
  13. // v-model
  14. formatter: {
  15. type: Function,
  16. default: () => {},
  17. require: true,
  18. },
  19. // 源数据
  20. source: {
  21. type: Object,
  22. require: true,
  23. },
  24. },
  25. data() {
  26. return {};
  27. },
  28. computed: {
  29. newSource() {
  30. return this.$props.source;
  31. },
  32. },
  33. watch: {
  34. newSource: {
  35. handler: function (newProp) {
  36. const { formatter } = this.$props;
  37. console.log("formatter", formatter);
  38. this.$emit("input", formatter(newProp));
  39. },
  40. deep: true,
  41. immediate: true,
  42. },
  43. },
  44. methods: {},
  45. created() {},
  46. mounted() {},
  47. destroyed() {},
  48. };
  49. </script>
  50. <style scoped></style>