如何更新以编程方式更改的元素的 v-model?

Dan*_*tos 4 jquery vue.js vuejs2

我正在为 Checkbox 使用 JS 插件。

这个插件创建了一个模拟复选框状态的开关按钮。

当切换按钮被切换时,它会更改checked复选框的值。

<input type="checkbox" v-model="active" class="switch">
<script>
    var app = new Vue({
        el: '#app',
        data: {
            active: false
        }
    })
</script>
Run Code Online (Sandbox Code Playgroud)

然而,active数据值仅在用户单击复选框时更新。以checked编程方式更改复选框属性不会触发 vue。

data以编程方式更改输入时如何更新 vue ?例如$("#myinput").prop("checked",true)

acd*_*ior 6

v-model每当change触发 * 事件时,Vue 都会更新的属性。触发它:

$("#myinput").prop("checked", true);
$("#myinput")[0].dispatchEvent(new Event('change')); // must trigger NATIVE event
Run Code Online (Sandbox Code Playgroud)

演示:

new Vue({
  el: '#app',
  data: {
    active: false
  }
});

$("#via-jq").click(function() {
  let currChecked = $("#myinput").prop("checked");
  $("#myinput").prop("checked", !currChecked);
  $("#myinput")[0].dispatchEvent(new Event('change'));
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue"></script>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>

<div id="app">
  <input id="myinput" type="checkbox" v-model="active" class="switch"> {{ active }}
</div>

<button id="via-jq">Toggle Via jQ</button>
Run Code Online (Sandbox Code Playgroud)

* es就是这种情况checkbox。事件因输入类型而异。例如,input事件也可能触发其他类型元素的更新。