当前位置: 首页 > 知识库问答 >
问题:

如何在Vue中以数组形式存储格式化数据,watch和v-model不保存格式化数据?

万俟财
2023-03-14

我有多个文本框,当用户在不同的文本框中键入时,我希望有一个存储所有格式化数据的数组。

格式化的数据以 m:ss 为单位(m - 分钟,s - 秒)

现在,所有不同的文本框都显示相同的值,因为只有一个this.formatTime.

我们如何改变这一点,以便v-model遍历数组,并将其添加到格式化值数组中?

文本框应显示格式化的值,并将其存储在所有格式值[]中。

我真的被困在这个,谢谢你的时间!

<div id="app">
   <div
      v-for="(input, index) in valueInputs"
      :key="index"
    >
     <input
         v-model="formatTime" //want to use allFormatValues[index], instead
         id="time-input"      //but this loses the formatting if I change to 
                              //above
         type="text"
     />
  </div>
</div>

 watch: {
   formatTime () {
      const totalLength = this.formatTime.length;
      let a = this.formatTime.replace(/[^0-9]/g, "")
        .substr(0, 1);

      const b = this.formatTime.replace(/[^0-5]/g, "")
        .substr(1, 1);

      const c = this.formatTime.replace(/[^0-9]/g, "")
        .substr(2, 1);
      if (totalLength >= 2) {
        a = `${a.substring(0, 1)}:${b}${c}`;
      }
      this.formatTime = a;
    },
}

我有一个数组,我想循环并设置这个值

data () {
  return {
  valueInputs: [],    // a list of inputs
  allFormatValues: [] // want to store all the formatted values here by the index
 }
}

共有2个答案

步骏
2023-03-14

更好的解决方案是使用计算属性。

首先,使你的输入改变原来的值。

<input v-model="input"
       id="time-input" 
       type="text"/>

然后,为了获得更干净的代码,使格式值方法

methods: {
    formatValue(value) {
        const totalLength = value.length
        let a = value.replace(/[^0-9]/g, "")
            .substr(0, 1)

        const b = value.replace(/[^0-5]/g, "")
            .substr(1, 1)

        const c = value.replace(/[^0-9]/g, "")
            .substr(2, 1)
        if (totalLength >= 2) {
            a = `${a.substring(0, 1)}:${b}${c}`
        }

        return a
    },
}

并最终创建计算属性

computed: {
    formattedValues() {
        return this.valueInputs.map(value => this.formatValue(value))
    }
}
蒋英博
2023-03-14

您可以绑定

> < li>

绑定<代码>

<input :value="input" ...>

在<代码>上

<input @input="formatTime(index, $event.target.value)" ...>

更新<code>formatTime()和<code>$event.target。值参数。还可以使用vm$set()使用新值对<code>valueInputs〔index〕

export default {
  methods: {
    formatTime(index, input) {
      const totalLength = input.length;
      let a = input.replace(/[^0-9]/g, "").substr(0, 1);

      //...

      this.$set(this.valueInputs, index, a)
    }
  }
}

演示

 类似资料:
  • 问题内容: 我从用户处以字符串格式获取日期,并且当前在创建Schema对象和保存之前在控制器中将其转换为Date。有没有一种方法可以将这种逻辑转换为模型,因为在我看来,模型是正确的选择 目前,我正在这样做 在旁注中,如何断言是否要在自定义函数检查中处理参数。就像是 问题答案: 虽然我不确定的含义,但是我很确定您正在寻找Schema对象函数,该函数是Mongoose中间件的一部分,允许在保存数据之前

  • v-charts 提供对数据格式的设置的能力,一个常见的设置数据格式的方式如下所示: <template> <ve-line :data="chartData" :settings="chartSettings"></ve-line> </template> <script> export default { data () { this.chartSettings = { metr

  • numberComma用于分割数字,默认为3位分割,一般用于格式化金额。 numberPad用于按照位数补0 numberRandom用于生成两个整数范围内的随机整数 import { numberComma, numberPad, numberRandom } from 'vux' numberComma(21342132) // 21,342,132 numberComma(21342132,

  • 可为插入PS Vita的PS Vita专用存储卡进行格式化(初期化)。 已插入想格式化存储卡的状态下,轻触[格式化]>[格式化存储卡]。请遵循画面指示正确操作。 重要 进行此操作后,会自动删除存储卡内的所有数据。由于数据会永远消失,请注意别消除了重要的数据。数据一经消除即无法恢复。 格式化中请勿拔除存储卡或关闭PS Vita主机的电源。

  • 数据格式化 这个ValueFormatter接口可以用来创建定制格式化程序类允许格式化图标中的数据或这Y轴上的数据。 使用ValueFormatter仅需要创建一个新的类和实现他的接口并且从getFormattedValue(float value)返回任何你想要显示的文本。 自定义格式化的例子: public class MyValueFormatter implements V

  • 我正在本地机器中将spark数据集保存为拼花文件。我想知道是否有任何方法可以使用某种加密算法对数据进行加密。我用来将数据保存为拼花文件的代码如下所示。 <代码>数据集。写入()。模式(“覆盖”)。拼花地板 我看到了一个类似的问题,但我的查询不同,因为我正在写入本地磁盘。