Menu
×

Được chứng nhận

Ghi lại kiến ​​thức của bạn

Đăng nhập Đăng ký

Tạo Tài khoản Example.com.vn miễn phí để cải thiện trải nghiệm học tập của bạn

Người tìm đường và việc học của tôi

Theo dõi tiến độ học tập của bạn tại Example.com.vn và thu thập phần thưởng

Nâng cấp

Trở thành người dùng PLUS và mở khóa các tính năng mạnh mẽ (không có quảng cáo, lưu trữ, hỗ trợ, ..)

Bắt đầu từ đâu

Bạn không chắc chắn muốn bắt đầu từ đâu? Đi theo con đường được hướng dẫn của chúng tôi

Trình chỉnh sửa mã (Dùng thử)

Với trình chỉnh sửa mã trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã và xem kết quả trong trình duyệt của mình

Video

Tìm hiểu những điều cơ bản về HTML qua video hướng dẫn thú vị và hấp dẫn

Mẫu

Chúng tôi đã tạo một loạt mẫu trang web đáp ứng mà bạn có thể sử dụng - miễn phí!

Web hosting

Lưu trữ trang web của riêng bạn và chia sẻ nó với mọi người với Example.com.vn Spaces

Tạo một máy chủ

Tạo máy chủ của riêng bạn bằng Python, PHP, React.js, Node.js, Java, C#, v.v.

Làm thế nào để

Bộ sưu tập lớn các đoạn mã cho HTML, CSS và JavaScript

Khung CSS

Xây dựng các trang web nhanh và phản hồi bằng cách sử dụng khung W3.CSS miễn phí của chúng tôi

Thống kê trình duyệt

Đọc xu hướng dài hạn của việc sử dụng trình duyệt

Tốc độ gõ

Kiểm tra tốc độ đánh máy của bạn

Đào tạo AWS

Tìm hiểu dịch vụ web của Amazon

Bộ chọn màu

Sử dụng công cụ chọn màu của chúng tôi để tìm các màu RGB, HEX và HSL khác nhau. Bánh xe màu hình tròn thể hiện sự chuyển màu trong quang phổ

Trò chơi mã

Trò chơi mã hóa W3Schools! Giúp linh miêu thu thập nón thông Logo Lynx

Đặt mục tiêu

Nhận hành trình học tập được cá nhân hóa dựa trên các kỹ năng và mục tiêu hiện tại của bạn

Bản tin

Tham gia bản tin của chúng tôi và có quyền truy cập vào nội dung độc quyền mỗi tháng

Việc làm

Thuê những tài năng công nghệ hàng đầu. Hợp lý hóa quy trình tuyển dụng của bạn để có đội ngũ phù hợp hoàn hảo

Lớp học

Hãy liên hệ để sử dụng Example.com.vn Plus và các chứng chỉ với tư cách là một tổ chức giáo dục

×
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP CÁCH W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS AN NINH MẠNG DỮ LIỆU KHOA HỌC

Hướng dẫn Vue

Vue HOME Vue Giới thiệu Vue Chỉ thị Vue v-bind Vue v-if Vue v-show Vue v-for Vue Sự kiện Vue v-on Vue Methods Vue Event Modifier Vue Forms Vue v-model Vue CSS Binding Vue Tính toán Thuộc tính Vue Watchers Vue Mẫu

Mở rộng quy mô

Vue Tại sao, Cách thức và Thiết lập Trang SFC đầu tiên của Vue Thành phần Vue Đạo cụ Vue Vue v-for Thành phần Vue $emit() Vue Thuộc tính dự phòng Vue Kiểu dáng có phạm vi Vue Thành phần cục bộ Vue Slots Vue v-slot Vue Scoped Slots Vue Thành phần động Vue Teleport Vue Yêu cầu HTTP Mẫu Vue Tham chiếu Vòng đời Vue Móc nối Vue Cung cấp/Tiêm Vue Định tuyến Vue Đầu vào biểu mẫu Vue Vue Animations Vue Animations với v-for Vue Build Vue Composition API

Tham khảo Vue

Thuộc tính tích hợp của Vue Các thành phần tích hợp của Vue Các phần tử tích hợp Vue Ví dụ thành phần Vue Chỉ thị Vue Tùy chọn phiên bản Vue Móc vòng đời Vue

Vue Ví dụ

Ví dụ về Vue Bài tập Vue Vue Quiz Vue Server Chứng chỉ Vue

Vue v-model Chỉ thị


Ví dụ

Sử dụng lệnh v-model để tạo liên kết hai chiều giữa phần tử <input> và thuộc tính dữ liệu.

 <template>
  <h1>v-model Example</h1>
  <p>Write something, and see the 'inputValue' data property update automatically.</p>
  <input type="text" v-model="inputValue"> 
  <p>inputValue property: "{{ inputValue }}"</p>
</template>
Chạy ví dụ »

Xem thêm ví dụ dưới đây.


Định nghĩa và cách sử dụng

Lệnh v-model được sử dụng để tạo liên kết hai chiều giữa phần tử đầu vào của biểu mẫu hoặc giữa thuộc tính phiên bản Vue và một thành phần.


Các phần tử đầu vào biểu mẫu với v-model

Các phần tử đầu vào của biểu mẫu có thể được sử dụng với v-model<input> , <select><textarea> .

Liên kết hai chiều với v-model trên các phần tử đầu vào của biểu mẫu hoạt động như sau:

  • Khi Vue phát hiện sự thay đổi trong giá trị đầu vào, nó sẽ cập nhật thuộc tính dữ liệu tương ứng. (HTML -> JavaScript)
  • Khi Vue phát hiện sự thay đổi trong thuộc tính phiên bản Vue, nó sẽ cập nhật giá trị đầu vào tương ứng. (JavaScript -> HTML)

(Xem Ví dụ ở trên và Ví dụ 1 bên dưới.)


Các thành phần có v-model

Khi v-model được sử dụng trên một thành phần, giao diện thành phần phải được thiết lập đúng cách với propsemits để đạt được liên kết hai chiều.

Liên kết hai chiều với v-model trên các thành phần hoạt động như sau:

  • Khi Vue phát hiện sự thay đổi trong thuộc tính phiên bản gốc, giá trị mới sẽ được gửi dưới dạng chỗ dựa cho thành phần.
  • Khi Vue phát hiện sự thay đổi trong thành phần con, giá trị mới sẽ được gửi tới thành phần mẹ dưới dạng sự kiện phát ra.

Khi v-model được sử dụng trên một thành phần, tên prop mặc định là 'modelValue' và tên sự kiện phát ra mặc định là 'update:modelValue'. (Xem Ví dụ 2Ví dụ 3. )

Khi v-model được sử dụng trên một thành phần, thay vì sử dụng thuộc tính dữ liệu phiên bản Vue, chúng ta có thể sử dụng thuộc tính được tính toán với các phương thức get()set() . ( Xem ví dụ 4 )

Có thể đặt các tên khác nhau cho đạo cụ và phát ra ngoài 'modelValue' và 'update:modelValue' mặc định bằng cách sử dụng v-model: . ( Xem ví dụ 5 )

Để có nhiều giá trị được kết nối dưới dạng liên kết hai chiều với một thành phần, chúng ta phải xác định từng giá trị đó bằng v-model của chính nó. ( Xem ví dụ 6 )


sửa đổi

sửa đổi Chi tiết
.lazy Sự kiện change được Vue sử dụng thay vì sự kiện input để biết thời điểm đồng bộ hóa. Điều này có nghĩa là trước tiên người dùng phải sửa đổi đầu vào, sau đó chuyển tiêu điểm ra khỏi phần tử đầu vào trước khi giá trị thuộc tính phiên bản được cập nhật. ( Xem ví dụ 7 )
.number Đánh máy dữ liệu đầu vào thành số. Việc này được thực hiện tự động khi sử dụng <input type="number"> .
.trim Loại bỏ khoảng trắng ở đầu và cuối dữ liệu nhập. ( Xem ví dụ 8 )
phong tục Để tạo một công cụ sửa đổi tùy chỉnh cho v-model , trước tiên chúng ta cần xác định một prop 'modelModifiers' để lưu trữ công cụ sửa đổi mới. Chức năng sửa đổi được viết bằng một phương thức. Nếu công cụ sửa đổi được đặt, mã thích hợp sẽ chạy trong phương thức trước khi gửi giá trị sao lưu cho thành phần chính. ( Xem ví dụ 9 )


Thêm ví dụ

ví dụ 1

Sử dụng thanh trượt ( <input type="range"> ) để thay đổi giá trị thuộc tính 'inputValue'. Phần tử <input type="text"> tự động cập nhật vì nó được liên kết với thuộc tính 'inputValue' với v-model .

 <template>
  <h1>v-model Example</h1>
  <p>Drag the slider to change the 'inputValue' data property, and see the input text field update automatically because of the two-way binding from v-model.</p>
  <input type="range" min="-50" max="50" v-on:input="sliderChange" value="4">
  <p>inputValue property: "{{ inputValue }}"</p>
  <input type="text" v-model="inputValue"> 
</template>

<script>
export default {
  data() {
    return {
      inputValue: null
    };
  },
  methods: {
    sliderChange(evt) {
      this.inputValue = evt.target.value
    }
  }
}
</script>
Chạy ví dụ »

Ví dụ 2

Sử dụng v-model trên thành phần có propsemits để những thay đổi trong phần tử <input> sẽ cập nhật thuộc tính 'văn bản' của phần tử cha.

App.vue :

 <template>
  <h2>Example v-model Directive</h2>
  <p>App.vue 'text' property: "{{ text }}"</p>
  <comp-one v-model="text"/>
</template>

<script>
export default {
  data() {
    return {
      text: 'Say Cheese'
    }
  }
}
</script>

CompOne.vue :

 <template>
  <div>
    <h3>Component</h3>
    <p>Write something in the text input field below to see that changes here are emitted from the component, and the parent 'text' property gets updated by the use of v-model.</p>
    <input
      :value="modelValue"
      @input="$emit('update:modelValue', $event.target.value)"
    />
  </div>
</template>

<script>
  export default {
    props: ['modelValue'],
    emits: ['update:modelValue']
  }
</script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  margin: 20px 0;
  max-width: 500px;
}
</style>
Chạy ví dụ »

Ví dụ 3

Sử dụng v-model trên thành phần để thể hiện ràng buộc hai chiều rõ ràng hơn. Thành phần có thể cập nhật thuộc tính 'văn bản' gốc và thành phần được cập nhật khi thuộc tính 'văn bản' gốc thay đổi.

App.vue :

 <template>
  <h2>Example v-model Directive</h2>
  <p>App.vue 'text' property: "<pre>{{ text }}</pre>"</p>
  <button v-on:click="this.text = 'Hello!'">text='Hello!'</button>
  <comp-one v-model="text"/>
</template>

<script>
export default {
  data() {
    return {
      text: 'Say Cheese'
    }
  }
}
</script>

<style>
pre {
  display: inline;
  background-color: yellow;
}
</style>

CompOne.vue :

 <template>
  <div>
    <h3>Component</h3>
    <p>Two-way binding on component with v-model:</p>
    <ol>
      <li>The component can update the 'text' property (using text field).</li>
      <li>The component gets updated when the 'text' property is changed (using button).</li>
    </ol>
    <input
      :value="modelValue"
      @input="$emit('update:modelValue', $event.target.value)"
    />
  </div>
</template>

<script>
  export default {
    props: ['modelValue'],
    emits: ['update:modelValue']
  }
</script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  margin: 20px 0;
  max-width: 600px;
}
</style>
Chạy ví dụ »

Ví dụ 4

Sử dụng v-model với giá trị được tính toán với các hàm get()set() bên trong thành phần.

CompOne.vue :

 <template>
  <div>
    <h3>Component</h3>
    <p>Two-way binding on component with v-model:</p>
    <ol>
      <li>The component can update the 'text' property (using text field).</li>
      <li>The component gets updated when the 'text' property is changed (using button).</li>
    </ol>
    <input v-model="inpVal"/>
  </div>
</template>

<script>
  export default {
    props: ['modelValue'],
    emits: ['update:modelValue'],
    computed: {
      inpVal: {
        get() {
          return this.modelValue;
        },
        set(inpVal) {
          this.$emit('update:modelValue',inpVal)
        }
      }
    }
  }
</script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  margin: 20px 0;
  max-width: 600px;
}
</style>
Chạy ví dụ »

Ví dụ 5

Sử dụng v-model:message trên thành phần để đổi tên tên prop mặc định 'modelValue' thành 'message'.

App.vue :

 <template>
  <h2>Example v-model Directive</h2>
  <p>App.vue 'text' property: "<pre>{{ text }}</pre>"</p>
  <button v-on:click="this.text = 'Hello!'">text='Hello!'</button>
  <comp-one v-model:message="text"/>
</template>

<script>
export default {
  data() {
    return {
      text: 'Say Cheese'
    }
  }
}
</script>

<style>
pre {
  display: inline;
  background-color: yellow;
}
</style>

CompOne.vue :

 <template>
  <div>
    <h3>Component</h3>
    <p>Two-way binding on component with v-model:</p>
    <ol>
      <li>The component can update the 'text' property (using text field).</li>
      <li>The component gets updated when the 'text' property is changed (using button).</li>
    </ol>
    <input
      :value="message"
      @input="$emit('update:message', $event.target.value)"
    />
  </div>
</template>

<script>
  export default {
    props: ['message'],
    emits: ['update:message']
  }
</script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  margin: 20px 0;
  max-width: 600px;
}
</style>
Chạy ví dụ »

Ví dụ 6

Sử dụng v-model hai lần trên thành phần để tạo liên kết hai chiều với hai giá trị.

App.vue :

 <template>
  <h2>Example v-model Directive</h2>
  <p>Name: "<pre>{{ name }}</pre>"</p>
  <p>Height: <pre>{{ height }}</pre> cm</p>
  <comp-one 
    v-model:name="name"
    v-model:height="height"
  />
</template>

<script>
export default {
  data() {
    return {
      name: 'Olaf',
      height: 120
    }
  }
}
</script>

<style>
pre {
  display: inline;
  background-color: yellow;
}
</style>

CompOne.vue :

 <template>
  <div>
    <h3>Component</h3>
    <p>Two inputs are bound to the component with v-model through props and emits.</p>
    <p>
      <label>
        Name: 
        <input
          type="text"
          :value="name"
          @input="$emit('update:name', $event.target.value)"
        />
      </label>
    </p>
    <p>
      <label>
        Height:
        <input
          type="range"
          :value="height"
          @input="$emit('update:height', $event.target.value)"
          min="50"
          max="200"
        />
        {{ this.$props.height }} cm
      </label>
    </p>
  </div>
</template>

<script>
  export default {
    props: ['name','height'],
    emits: ['update:name','update:height']
  }
</script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  margin: 20px 0;
  max-width: 300px;
}
</style>
Chạy ví dụ »

Ví dụ 7

Sử dụng .lazy để trước tiên người dùng phải sửa đổi phần tử đầu vào, sau đó thay đổi tiêu điểm khỏi phần tử đầu vào trước khi thuộc tính được cập nhật bằng v-model .

 <template>
  <h1>v-model Example</h1>
  <p>Using the '.lazy' modifier, you must first write something, then click somewhere else, or use the tab key to switch focus away from the input element, before the property get updated.</p>
  <input type="text" v-model.lazy="inputValue"> 
  <p>inputValue property: "{{ inputValue }}"</p>
</template>

<script>
export default {
  data() {
    return {
      inputValue: null
    };
  }
}
</script>
Chạy ví dụ »

Ví dụ 8

Sử dụng .lazy để trước tiên người dùng phải sửa đổi phần tử đầu vào, sau đó thay đổi tiêu điểm khỏi phần tử đầu vào trước khi thuộc tính được cập nhật bằng v-model .

 <template>
  <h1>v-model Example</h1>
  <p>Using the '.trim' modifier will remove any white spaces at the start and end of the input.</p>
  <p>Add white spaces at the start and end in the input fields below to see the difference with or with out '.trim'.</p>
  <p>No '.trim': <input type="text" v-model="inputVal1"> "<pre>{{ inputVal1 }}</pre>"</p> 
  <p>With '.trim': <input type="text" v-model.trim="inputVal2"> "<pre>{{ inputVal2 }}</pre>"</p>
  
</template>

<script>
export default {
  data() {
    return {
      inputVal1: 'Hello',
      inputVal2: 'Hi'
    };
  }
}
</script>

<style>
pre {
  display: inline;
  background-color: lightgreen;

}
</style>
Chạy ví dụ »

Ví dụ 9

Sử dụng công cụ sửa đổi .allCapital tùy chỉnh để chuyển đổi tất cả các ký tự trong đầu vào thành chữ hoa nếu công cụ sửa đổi .allCapital được đặt.

App.vue :

 <template>
  <h2>Example v-model Directive</h2>
  <p>App.vue 'text' property: "{{ text }}"</p>
  <comp-one v-model.allCapital="text"/>
</template>

<script>
export default {
  data() {
    return {
      text: ''
    }
  }
}
</script>

CompOne.vue :

 <template>
  <div>
    <h3>Component</h3>
    <p>Write something in the text input field below. Click somewhere else or use the tab key to shift focus away from the input element to see the effect of the custom 'allCapital' modifier.</p>
    <input 
      :value="modelValue" 
      @change="this.emitVal" 
    />
  </div>
</template>

<script>
export default {
  props: {
    modelValue: String,
    modelModifiers: {
      // modelModifiers is an empty object initially.
      // Modifiers set on the component will be stored here.
      default: () => ({}) 
    }
  },
  emits: ['update:modelValue'],
  methods: {
    emitVal(e) {
      let value = e.target.value
      if (this.modelModifiers.allCapital) {
        value = value.toUpperCase()
      }
      this.$emit('update:modelValue', value)
    }
  }
}
</script>

<style scoped>
div {
  border: solid black 1px;
  padding: 10px;
  margin: 20px 0;
  max-width: 500px;
}
</style>
Chạy ví dụ »

Trang liên quan

Hướng dẫn về Vue: Thành phần Vue

Hướng dẫn Vue: Đạo cụ Vue

Hướng dẫn về Vue: Phương thức Vue $emit()

Hướng dẫn về Vue: Thuộc tính được tính toán của Vue

Tham khảo Vue: Phương thức Vue $emit()

Tham khảo Vue: Đối tượng Vue $props

Hướng dẫn JavaScript: Trình truy cập đối tượng JavaScript


×

Liên hệ bán hàng

Nếu bạn muốn sử dụng dịch vụ của Example.com.vn với tư cách là một tổ chức giáo dục, nhóm hoặc doanh nghiệp, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Báo cáo lỗi

Nếu bạn muốn báo cáo lỗi hoặc nếu bạn muốn đưa ra đề xuất, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Example.com.vn được tối ưu hóa cho việc học tập và đào tạo. Các ví dụ có thể được đơn giản hóa để cải thiện khả năng đọc và học. Các hướng dẫn, tài liệu tham khảo và ví dụ liên tục được xem xét để tránh sai sót, nhưng chúng tôi không thể đảm bảo tính chính xác hoàn toàn của mọi nội dung. Khi sử dụng W3Schools, bạn đồng ý đã đọc và chấp nhận các điều khoản sử dụng , chính sách cookie và quyền riêng tư của chúng tôi.

Bản quyền 1999-2024 của Refsnes Data. Đã đăng ký Bản quyền. Example.com.vn được cung cấp bởi W3.CSS .