Blame view

node_modules/element-ui/packages/form/src/label-wrap.vue 1.73 KB
7820380e   “wangming”   1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  <script>
  
  export default {
    props: {
      isAutoWidth: Boolean,
      updateAll: Boolean
    },
  
    inject: ['elForm', 'elFormItem'],
  
    render() {
      const slots = this.$slots.default;
      if (!slots) return null;
      if (this.isAutoWidth) {
        const autoLabelWidth = this.elForm.autoLabelWidth;
        const style = {};
        if (autoLabelWidth && autoLabelWidth !== 'auto') {
          const marginLeft = parseInt(autoLabelWidth, 10) - this.computedWidth;
          if (marginLeft) {
            style.marginLeft = marginLeft + 'px';
          }
        }
        return (<div class="el-form-item__label-wrap" style={style}>
          { slots }
        </div>);
      } else {
        return slots[0];
      }
    },
  
    methods: {
      getLabelWidth() {
        if (this.$el && this.$el.firstElementChild) {
          const computedWidth = window.getComputedStyle(this.$el.firstElementChild).width;
          return Math.ceil(parseFloat(computedWidth));
        } else {
          return 0;
        }
      },
      updateLabelWidth(action = 'update') {
        if (this.$slots.default && this.isAutoWidth && this.$el.firstElementChild) {
          if (action === 'update') {
            this.computedWidth = this.getLabelWidth();
          } else if (action === 'remove') {
            this.elForm.deregisterLabelWidth(this.computedWidth);
          }
        }
      }
    },
  
    watch: {
      computedWidth(val, oldVal) {
        if (this.updateAll) {
          this.elForm.registerLabelWidth(val, oldVal);
          this.elFormItem.updateComputedLabelWidth(val);
        }
      }
    },
  
    data() {
      return {
        computedWidth: 0
      };
    },
  
    mounted() {
      this.updateLabelWidth('update');
    },
  
    updated() {
      this.updateLabelWidth('update');
    },
  
    beforeDestroy() {
      this.updateLabelWidth('remove');
    }
  };
  </script>