- Học Vue
-
Hệ sinh thái
Hỗ trợ
Công cụ
Thư viện chính thức
Tin tức
Tài nguyên
- Đội ngũ
- Hỗ trợ Vue
- Ngôn ngữ
Hướng dẫn
Khái niệm cơ bản
- Cài đặt
- Giới thiệu
- Đối tượng Vue
- Cú pháp template
- Computed property và watcher
- Binding cho class và style
- Render theo điều kiện
- Render danh sách
- Xử lí sự kiện
- Ràng buộc form input
- Cơ bản về component
Components In-Depth
- Đăng kí Component
- Props
- Custom Events
- Slots
- Dynamic & Async Components
- Handling Edge Cases
Hiệu ứng chuyển động
- Transition cho enter/leave & danh sách
- Transition cho trạng thái
Tái sử dụng & kết hợp
- Mixin
- Directive tùy biến
- Các hàm render & JSX
- Plugin
- Filter
Công cụ
- Triển khai cho môi trường production
- Single File Components
- Unit test
- TypeScript Support
Mở rộng quy mô ứng dụng
- Routing
- Quản lí trạng thái
- Render ở phía server
Bên trong Vue
- Reactivity in Depth
Thông tin thêm
- Comparison with Other Frameworks
- Join the Vue.js Community!
- Đội ngũ
Ràng buộc form input
Cách sử dụng cơ bản
Bạn có thể sử dụng directive v-model
để tạo ràng buộc dữ liệu 2 chiều lên các phần tử form input và textarea. Vue sẽ tự động chọn cách phù hợp để cập nhật phần tử này dựa trên kiểu của input. Có một chút ma thuật, v-model
là syntax sugar trong việc cập nhật dữ liệu dựa trên các sự kiện input từ người dùng kèm theo một số trường hợp đặc biệt khác.
v-model
sẽ bỏ qua giá trị khởi tạo của các thuộc tính value
, checked
hoặc selected
trong mọi phần tử form. Nó luôn luôn xem data trong đối tượng Vue là nguồn đáng tin cậy duy nhất. Bạn nên khai báo các giá trị khởi tạo trong JavaScript, bên trong option data
của component.
Đối với các ngôn ngữ đòi hỏi bộ gõ (IME) (tiếng Trung, tiếng Nhật, Tiếng Hàn v.v.), bạn sẽ nhận thấy rằng v-model
không thay đổi trong quá trình biên soạn của IME. Nếu bạn muốn nhận các thay đổi này thì phải sử dụng sự kiện input
.
Văn bản
<input v-model="message" placeholder="Nhập thông điệp"> |
Thông điệp: {{ message }}
Văn bản nhiều dòng
<span>Thông điệp có nhiều dòng:</span> |
{{ message }}
Nội suy (<textarea>{{text}}</textarea>
) không hoạt động với textarea. Hãy sử dụng v-model
.
Checkbox
Checkbox đơn, giá trị boolean:
<input type="checkbox" id="checkbox" v-model="checked"> |
Nhiều checkbox, ràng buộc vào cùng một mảng:
<div id='example-3'> |
new Vue({ |
Món đã chọn: {{ checkedNames }}
Radio
<input type="radio" id="cac-mon-rau" value="Các món rau" v-model="picked"> |
Đã chọn: {{ picked }}
Select
Select đơn:
<select v-model="selected"> |
new Vue({ |
Món đã chọn: {{ selected }}
Nếu giá trị khởi tạo của biểu thức trong v-model
không khớp với bất kỳ option nào, thì <select>
sẽ render ở trạng thái “chưa được chọn”. Trên iOS nó sẽ làm cho người dùng không thể chọn item đầu tiên bởi vì iOS không gọi sự kiện change trong trường hợp này. Do đó chúng tôi khuyên bạn nên thêm một lựa chọn có giá trị rỗng giống như trong ví dụ trên.
Select nhiều lựa chọn (được ràng buộc với một mảng):
<select v-model="selected" multiple> |
Món đã chọn: {{ selected }}
Render <option>
với v-for
:
<select v-model="selected"> |
new Vue({ |
Ràng buộc giá trị
Đối với radio, checkbox và select option, v-model
thường ràng buộc giá trị kiểu chuỗi tĩnh (hoặc boolean đối với checkbox):
<!-- `picked` sẽ là chuỗi "a" khi được check --> |
Nhưng đôi khi chúng ta muốn ràng buộc giá trị với một thuộc tính động trong đối tượng Vue. Chúng ta có thể sử dụng v-bind
để làm điều này. Thêm nữa, sử dụng v-bind
còn cho phép ràng buộc giá trị của input với các trị không phải kiểu chuỗi.
Checkbox
<input |
// khi được check: |
Các thuộc tính true-value
và false-value
không ảnh hưởng đến thuộc tính value
của input, vì trình duyệt không gủi kèm theo các checkbox không được check khi submit form. Để đảm bảo một trong hai giá trị này được submit cùng với form (ví dụ “yes” hoặc “no”), hãy dùng input dạng radio thay thế.
Radio
<input type="radio" v-model="pick" v-bind:value="a"> |
// khi được check: |
Select option
<select v-model="selected"> |
// khi được chọn: |
Modifier
.lazy
Mặc định, v-model
đồng bộ giá trị của input với dữ liệu sau sự kiện input
(có ngoại lệ đối với trường hợp bộ gõ như đã nói ở trên). Bạn có thể thêm modifier lazy
để đồng bộ sau sự kiện change
:
<!-- được đồng bộ sau sự kiện "change" thay vì "input" --> |
.number
Nếu bạn muốn giá trị từ input được tự động chuyển kiểu về kiểu số, bạn có thể thêm modifier number
vào v-model
:
<input v-model.number="age" type="number"> |
Điều này rất hữu ích, vì kể cả khi input có type="number"
thì giá trị được trả về của nó luôn luôn là chuỗi.
.trim
Dùng để tự động loại bỏ khoảng trắng trước và sau giá trị trong input.
<input v-model.trim="msg"> |
v-model
với Component
Nếu bạn chưa quen với Vue component, bạn có thể bỏ qua phần này.
Không phải lúc nào các kiểu input có sẵn của HTML cũng có thể đáp ứng nhu cầu của bạn. May mắn là các component của Vue cho phép bạn xây dựng các input riêng tái sử dụng được với các hành vi (behavior) được tùy chỉnh hoàn toàn. Các input này thậm chí còn hoạt động với v-model
.