2

有一种情况,我需要从 VueJS 外部触发 VueJS 管理的组件的更改。

我发现我可以通过触发或调用其click()属性来轻松地在复选框上执行此操作,但我不能对 ainput[type=text]select元素执行相同的操作。

jsfiddle 在这里

我在 VueJS 文档中查看了反应性如何工作,但不明白如何在这里实现。我该怎么做?

4

1 回答 1

1

您可以先将 Vue 实例保存在全局变量 ( window.vueApp = new Vue({...})) 中,然后通过执行类似的操作来更改值vueApp.dataValue = ...

编辑了你的小提琴:https ://jsfiddle.net/jacobgoh101/q2zv5gz1/6/

将 Vue 实例保存在全局变量中

window.vueApp = new Vue({ ...

在onclick里面:

  <!-- totally unrelated to Vue! -->
  <button onclick="vueApp.selectValue = vueApp.selectValue === 'alpha' ? 'beta' : 'alpha' " >
   change select
  </button>
    <button onclick="vueApp.checkboxValue = !vueApp.checkboxValue" >
   change checkbox
  </button>
  <button onclick="vueApp.textValue = Math.random()">
  change input
  </button>

更新

如果你想要一种元素不知道 Vue 是如何实现的方法,你必须找到一种方法来以编程方式正确触发输入元素上的输入事件。

要触发事件,您可以使用

.dispatchEvent(new Event('eventname'));

玩弄之后:https ://jsfiddle.net/jacobgoh101/q2zv5gz1/7/

change活动适用于选择

document.getElementById('select').dispatchEvent(new Event('change'));

input事件适用于文本

document.getElementById('text').dispatchEvent(new Event('input'));

注意:这可能无法在不同的浏览器中可靠地工作。因为这是试图以编程方式模拟用户操作。我认为不同的浏览器会以不同的方式处理用户操作。

于 2018-05-30T03:24:08.270 回答