【问题标题】:How to write vue .sync in javascript using createElement render function如何使用 createElement 渲染函数在 javascript 中编写 vue .sync
【发布时间】:2018-10-07 02:16:02
【问题描述】:

我正在将我的代码从模板文件更改为渲染函数。现在我有了这个 HTML:

:open.sync="state"

但我不知道如何将其翻译成 JavaScript。如何将其写入 createElement 函数?

【问题讨论】:

标签: javascript vue.js synchronization vuejs2


【解决方案1】:

截至 2021 年 3 月 && 来自 @acdcjunior 的灵感,我想出了这个解决方案:

// From Parent 
<custom-input
  :open.sync="formData.groupName"
/>
// CHILD
<div class="wrapper">
      <input
        type="text"
        class="full-width"
        :value="open" @input="$emit('update:open', $event)"
      />
</div>

顺便说一句:他的解决方案不起作用,因为 $event.target.value 未定义。

【讨论】:

    【解决方案2】:

    记住

    :open.sync="state"
    

    基本上是语法糖

    :open="state" @update:open="state = $event"
    

    那么渲染函数中的等价物将是:

    createElement('child', {
      props: {                                   // :open="state"
        "open": this.state
      },
      on: {                                      // @update:open="state = $event"
        "update:open": ($event) => {
          this.state = $event;
        }
      }
    })
    

    演示:

    Vue.component('child', {
      template: '#child',
      props: ['open']
    })
    
    new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue.js!'
      },
      render(createElement) {
        return (
          createElement('div', [
            this.message,
            createElement('br'),
            createElement('child', {
              props: {
                "open": this.message
              },
              on: {
                "update:open": ($event) => {
                  this.message = $event;
                }
              }
            })
          ])
        );
      }
    })
    <script src="https://unpkg.com/vue"></script>
    
    <div id="app">
      <p>{{ message }}</p>
      <child :open.sync="message"></child>
    </div>
    
    <template id="child">
      <div>
        <input type="text" :value="open" @input="$emit('update:open', $event.target.value)">
        open: {{ open }}
      </div>
    </template>

    【讨论】:

      猜你喜欢
      • 2018-06-21
      • 2020-07-23
      • 2021-03-12
      • 1970-01-01
      • 2019-09-19
      • 2020-04-29
      • 2019-10-20
      • 2019-09-20
      • 1970-01-01
      相关资源
      最近更新 更多