index.vue 833 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. this.$emit("input", formatter(newProp));
  38. },
  39. deep: true,
  40. immediate: true,
  41. },
  42. },
  43. methods: {},
  44. created() {
  45. },
  46. mounted() {},
  47. destroyed() {},
  48. };
  49. </script>
  50. <style scoped></style>