将 vuejs 中的 2 个输入与中间的计算双重链接

Posted

技术标签:

【中文标题】将 vuejs 中的 2 个输入与中间的计算双重链接【英文标题】:doubly linking 2 inputs in vuejs with a computation in the middle 【发布时间】:2019-03-14 21:28:39 【问题描述】:

用文字解释我想要实现的目标对我来说很困难,因为我对 vue.js 很陌生。

我知道我可以使用 v-model 将输入链接到变量,但是,我想将输入链接到变量,进行计算,并将其显示在另一个输入中。我还需要另一个输入来进行逆计算并将结果显示在第一个输入中。

好的,在沙拉这个词之后,这是我需要的确切行为的示例。

您可以在任一输入中键入一个值,另一个输入将显示转换。我怎样才能以最好的方式实现这一目标?有没有办法避免 hacky 解决方案,例如条件取决于哪个框处于活动状态的 if 语句?

顺便说一句:在我理解正确的逻辑后,我会将所有这些都转移到 Vuex 中吗? vuex 中的某些东西可以处理这种情况吗?

【问题讨论】:

很好的问题(而且措辞得体)。你有没有尝试过? 【参考方案1】:

为此,您可以将 <input> 元素绑定到计算属性,每个属性都有一个 setter

当您更新一个输入时,您可以相应地设置两个输入的值。

例如...

const mul = 1.5

new Vue(
  el: '#app',
  data: 
    val1: null,
    val2: null
  ,
  computed: 
    input1: 
      get () 
        return this.val1
      ,
      set (val) 
        this.val1 = val
        this.val2 = (val * mul).toFixed(2) // multiply to set val2
      
    ,
    input2: 
      get () 
        return this.val2
      ,
      set (val) 
        this.val2 = val
        this.val1 = (val / mul).toFixed(2) // divide to set val1
      
    
  
)
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script>
<div id="app">
<p>
<label for="input1">Input #1:</label>
<input id="input1" v-model="input1" type="number">
</p>
<p>
<label for="input2">Input #2:</label>
<input id="input2" v-model="input2" type="number">
</p>
</div>

【讨论】:

仅供参考,您不必必须使用toFixed(),但我认为这会是一个不错的选择 嗨,菲尔,很抱歉,我没有看到您之前关于进展情况的评论。我已经出城了。您的解决方案完美运行。我仍然遇到的唯一问题是,当我也更改选择框的值时,我需要更新这些值。必须有一个简单的方法来做到这一点。我尝试过使用 v-on:change 指令,但似乎我找不到任何东西都可以做到。我的直觉是让函数更通用,并在模板中需要任何更改时调用它们。

以上是关于将 vuejs 中的 2 个输入与中间的计算双重链接的主要内容,如果未能解决你的问题,请参考以下文章

每天一道算法题(java数据结构与算法)——> 链表的中间结点

在输入失去焦点之前,VueJS 中的计算道具不会更新

计算机的潜意识-简介

将v-model与对象一起使用尤其是通过VueJS中的几个嵌套组件是不是很糟糕?

链表经典面试题(反转链表,中间节点,倒数第k个节点,合并分割链表,删除重复节点)

vuejs:根据每个循环的 vuejs 中数组中的 2 个变量更改 <div> 的宽度