>웹 프론트엔드 >프런트엔드 Q&A >vue 입력은 이전과 이후의 값을 수정합니다.

vue 입력은 이전과 이후의 값을 수정합니다.

WBOY
WBOY원래의
2023-05-11 12:35:071254검색

Vue는 반응형 구성 요소를 쉽게 만들 수 있는 인기 있는 JavaScript 프레임워크입니다. WEB 개발에서 컴포넌트의 입력 상자는 가장 일반적인 요소 중 하나입니다. 많은 시나리오에서 개발자는 입력 상자의 값을 추적하고 처리해야 합니다. 이 글에서는 Vue에서 입력 상자의 수정된 값을 처리하는 방법에 대해 설명합니다.

입력 상자 듣기

Vue는 입력 상자의 값을 모니터링할 수 있는 다양한 방법을 제공합니다. 가장 일반적인 방법은 v-model을 사용하는 것입니다. v-model 지시문은 양방향 바인딩을 구현합니다. 즉, 입력 상자에 대한 수정 사항이 구성 요소 인스턴스의 데이터 속성에 반영되고, 데이터 속성 값이 변경되면 입력이 상자도 해당 값이 자동으로 업데이트됩니다. v-modelv-model 指令实现了双向绑定, 这意味着对输入框的修改将反映在组件实例中的数据属性上, 并且当数据属性的值发生改变时, 输入框中也会自动更新对应的值。

以下是一个简单的例子,演示了如何使用 v-model 监听一个文本输入框的值:

<template>
  <div>
    <label for="username">用户名:</label>
    <input id="username" v-model="username">
    <p>用户名: {{ username }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: ""
    };
  }
};
</script>

在上面的例子中, 我们使用 v-model 绑定了一个文本输入框,并在组件实例中维护了一个 username 数据属性。 当用户在输入框中输入值时, username 数据属性将自动更新, 并且在模板中的差值表达式 {{ username }} 也将随之更新。

记录输入框修改前后的值

在一些场景中,我们需要知道输入框的修改前后的值。比如在表单中,我们希望能够跟踪用户所做的更改, 并将这些更改保存到一个 changes 数组中以备后续使用。

在 Vue 中,我们可以使用 watch 来监控数据属性的变化。当数据属性的值发生改变时,我们可以使用 handler 函数来执行一些操作。

我们可以使用以下代码来记录单个输入框的修改前后值:

<template>
  <div>
    <label for="username">用户名:</label>
    <input id="username" v-model="username">
    <p>用户名: {{ username }}</p>
    <pre v-text="JSON.stringify(changes)">
<script> export default { data() { return { username: "", changes: [] }; }, watch: { username(newVal, oldVal) { if (newVal !== oldVal) { this.changes.push({ before: oldVal, after: newVal }); } } } }; </script>

在上面的代码中, 我们通过新增一个 changes 数组, 来记录输入框的每次修改。 我们稍微修改了 watch 选项中的 handler 函数,现在它将在输入框的值变化时被触发。 当新值不等于旧值时, 我们将前一个值和后一个值以对象的形式存入 changes 数组中。

记录多个输入框的值

在实际开发中, 我们通常需要监控多个输入框的值。在这种情况下, 我们可以使用一个格式相同的对象来存储所有的输入框更改。 对象中的属性名是输入框的 ID 或名称,而属性值是一个对象, 其中包含输入框修改前后的值。

<template>
  <div>
    <label for="username">用户名:</label>
    <input id="username" v-model="formData.username">
    <p>用户名: {{ formData.username }}</p>

    <label for="email">邮箱:</label>
    <input id="email" v-model="formData.email">
    <p>邮箱: {{ formData.email }}</p>

    <pre v-text="JSON.stringify(changes)">
<script> export default { data() { return { formData: { username: "", email: "" }, changes: {} }; }, watch: { formData: { handler(newVal, oldVal) { // 遍历对象 formData for (const key in newVal) { // 如果 newValue 和 oldValue 不同 if (newVal[key] !== oldVal[key]) { // 新增一个属性,属性名为输入框的名称或 ID if (!this.changes[key]) { this.$set(this.changes, key, {}); } // 设置属性值, 属性值包含 before 和 after 两个字段 this.changes[key].before = oldVal[key]; this.changes[key].after = newVal[key]; } } }, // 深度监听对象中的属性,当数据属性的值发生改变时,handler 中 callBack 函数将被执行。 deep: true } } }; </script>

在上面的代码中, 我们通过在 data 方法中新增一个 formData 对象来维护多个输入框的值。我们还通过新增一个 changes 对象来记录所有的更改。

我们修改了 watch 选项中的 handler 函数, 现在它对 formData 对象进行遍历。当检测到某个输入框的值更改时, 它将检查 changes 对象是否已经存在这个输入框,并设置 beforeafter 属性值。如果 changes 对象中不存在该输入框, 则会新增一个属性。

我们还将 watch 选项的 deep 属性设置为 true, 这将深度监控 formData 对象的属性, 使得当输入框中的值嵌套在 formData 对象中时,数据也可以被正确地观测到。

总结

在本文中, 我们讨论了在 Vue 中如何处理输入框的修改前后值。 我们看到了如何使用 watch

다음은 v-model을 사용하여 텍스트 입력 상자의 값을 모니터링하는 방법을 보여주는 간단한 예입니다. 🎜rrreee🎜위 예에서는 v-model code>는 텍스트 입력 상자를 바인딩하고 구성 요소 인스턴스에서 <code>username 데이터 속성을 유지합니다. 사용자가 입력 상자에 값을 입력하면 username 데이터 속성이 자동으로 업데이트되고, 템플릿의 차이 표현식 {{ 사용자 이름 }}도 업데이트됩니다. 따라서 . 🎜🎜수정 전과 수정 후 입력 상자의 값을 기록하세요🎜🎜일부 시나리오에서는 수정 전과 수정 후 입력 상자의 값을 알아야 합니다. 예를 들어, 양식에서 사용자가 변경한 내용을 추적하고 나중에 사용할 수 있도록 이러한 변경 사항을 changes 배열에 저장할 수 있기를 원합니다. 🎜🎜Vue에서는 watch를 사용하여 데이터 속성의 변경 사항을 모니터링할 수 있습니다. 데이터 속성 값이 변경되면 handler 함수를 사용하여 일부 작업을 수행할 수 있습니다. 🎜🎜다음 코드를 사용하여 단일 입력 상자의 수정 전후를 기록할 수 있습니다. 🎜rrreee🎜위 코드에서는 새로운 changes 배열을 추가하여 입력 상자의 각 수정 사항을 기록합니다. . 이제 입력 상자의 값이 변경될 때 트리거되도록 watch 옵션의 handler 함수를 약간 수정했습니다. 새 값이 이전 값과 같지 않으면 이전 값과 다음 값을 changes 배열에 개체 형식으로 저장합니다. 🎜🎜여러 입력 상자의 값을 기록합니다🎜🎜실제 개발에서는 일반적으로 여러 입력 상자의 값을 모니터링해야 합니다. 이 경우 동일한 형식의 개체를 사용하여 모든 입력 상자 변경 사항을 저장할 수 있습니다. 객체의 속성 이름은 입력 상자의 ID 또는 이름이고, 속성 값은 입력 상자가 수정되기 전과 후의 값을 포함하는 객체입니다. 🎜rrreee🎜위 코드에서는 data 메서드에 새로운 formData 개체를 추가하여 여러 입력 상자의 값을 유지합니다. 또한 새로운 changes 객체를 추가하여 모든 변경 사항을 기록합니다. 🎜🎜watch 옵션의 handler 함수를 수정하여 이제 formData 객체를 순회하도록 했습니다. 입력 상자의 값이 변경된 것을 감지하면 changes 개체가 이미 존재하는지 확인하고 beforeafter 속성 값을 설정합니다. changes 객체에 입력 상자가 없으면 새 속성이 추가됩니다. 🎜🎜또한 watch 옵션의 deep 속성을 ​​true로 설정하여 formData의 속성을 심층적으로 모니터링합니다. code> 객체를 사용하면 입력 상자의 값이 formData 객체에 중첩될 때 데이터를 올바르게 관찰할 수 있습니다. 🎜🎜요약🎜🎜이 글에서는 Vue에서 입력 상자의 수정된 값을 처리하는 방법에 대해 논의했습니다. watch를 사용하여 데이터 속성의 변경 사항을 모니터링하는 방법과 입력 필드의 변경 사항을 개체에 기록하는 방법을 살펴보았습니다. 실제 개발에서 이 기술은 매우 유용하며 양식의 모든 변경 사항을 실시간으로 추적하는 데 도움이 될 수 있습니다. 🎜

위 내용은 vue 입력은 이전과 이후의 값을 수정합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Alibaba Cloud ECS 설치 nodejs다음 기사:Alibaba Cloud ECS 설치 nodejs

관련 기사

더보기