- 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Å©
Directive tùy biến
Giá»i thiá»u
Bên cạnh những directive Äược cung cấp mặc Äá»nh (v-model
và v-show
), Vue cÅ©ng cho phép bạn ÄÄng kà các directive tùy biến của riêng mình. LÆ°u ý là trong phiên bản Vue 2.0, cách tá»t nhất Äá» sá» dụng lại và trừu tượng hóa code là dùng component, tuy nhiên có thá» có những lúc bạn cần má»t sá» truy xuất cấp thấp Äến các phần tá» web, và trong những trÆ°á»ng hợp nà y thì directive tùy biến sẽ trá» nên hữu Ãch. Và dụ, Äây là má»t phần tá» input Äược focus tá»± Äá»ng:
Khi trang nà y Äược tải, phần tá» trên Äây sẽ Äược focus (lÆ°u ý: tÃnh nÄng focus tá»± Äá»ng không Äược há» trợ trên mobile Safari). Nếu bạn chÆ°a há» bấm và o bất kì Äâu khác trên trang, ngay lúc nà y phần tá» input sẽ có focus. Giá» chúng ta hãy viết directive há» trợ cho tÃnh nÄng nà y:
// ÄÄng kà má»t directive tùy biến cấp toà n cục vá»i tên là `v-focus` |
Nếu muá»n ÄÄng kà directive á» cấp cục bá» thay vì toà n cục, bạn có thá» dùng tùy chá»n directives
khi khai báo component:
directives: { |
Sau Äó trong template, bạn có thá» dùng thuá»c tÃnh v-focus
trên bất kì phần tỠnà o, như sau:
<input v-focus> |
Các hà m hook
Má»t object khai báo directive có thá» cung cấp má»t sá» hà m hook (tất cả các hà m nà y Äá»u không bắt buá»c):
bind
: chá» Äược gá»i má»t lần, khi directive Äược bind (rà ng buá»c) và o phần tá». Äây là nÆ¡i bạn có thá» thá»±c hiá»n các thao tác cà i Äặt má»t lần.inserted
: Äược gá»i khi element Äã Äược chèn (insert) và o phần tá» cha (Äiá»u nà y chá» bảo Äảm là phần tá» cha Äã Äược tạo ra chứ không chắc là nó Äã tá»n tại trong DOM).update
: Äược gá»i sau khi VNode của phần tá» chứa Äã cáºp nháºt, nhÆ°ng có thá» là trÆ°á»c khi các phần tá» con Äược cáºp nháºt. Giá trá» của directive lúc nà y có thá» Äã thay Äá»i hoặc chÆ°a, nhÆ°ng bạn có thá» bá» qua các thay Äá»i không cần thiết bằng cách so sánh hai giá trá» cÅ© và má»i (xem thông tin vá» tham sá» của hà m hook á» bên dÆ°á»i).componentUpdated
: Äược gá»i sau khi VNode của phần tá» chứa và VNode của toà n bá» các phần tá» con Äã cáºp nháºt.unbind
: chá» Äược gá»i má»t lần, khi directive Äược unbind khá»i phần tá».
Chúng ta sẽ tìm hiá»u vá» các tham sá» Äược truyá»n và o các hà m hook nà y trong phần tiếp theo.
Tham sỠcủa các hà m hook
Các hà m hook cho directive Äược truyá»n và o các tham sá» sau Äây:
- el: Phần tá» Äược directive bind và o. Tham sá» nà y có thá» Äược dùng Äá» thay Äá»i DOM má»t cách trá»±c tiếp.
- binding: Má»t object chứa những thuá»c tÃnh sau:
- name: Tên của directive, không có tiếp Äầu ngữ
v-
. - value: Giá trá» Äược truyá»n và o directive. Và dụ vá»i
v-my-directive="1 + 1"
thìvalue
sẽ lÃ2
. - oldValue: Giá trá» trÆ°á»c Äây, chá» tá»n tại trong các hook
update
vÃcomponentUpdated
.oldValue
sẽ luôn có cho dù giá trá» có Äược thay Äá»i hay không. - expression: Biá»u thức của binding dÆ°á»i dạng chuá»i. Và dụ vá»i
v-my-directive="1 + 1"
, thìexpression
sẽ lÃ"1 + 1"
. - arg: Tham sá» Äược truyá»n và o directive, nếu có. Và dụ vá»i
v-my-directive:foo
thìarg
sẽ lÃ"foo"
. - modifiers: Má»t object chứa các modifier, nếu có. Và dụ vá»i
v-my-directive.foo.bar
, thìmodifiers
sẽ lÃ{ foo: true, bar: true }
.
- name: Tên của directive, không có tiếp Äầu ngữ
- vnode: Vnode Äược trình biên dá»ch của Vue tạo ra. Xem thêm chi tiết tại VNode API.
- oldVnode: VNode trÆ°á»c Äây, chá» tá»n tại trong các hook
update
vÃcomponentUpdated
.
Ngoà i el
, bạn nên coi là read-only (chá» Äá»c) và Äừng bao giá» chá»nh sá»a các tham sá» nà y. Nếu muá»n chia sẻ thông tin giữa các hook vá»i nhau, bạn nên dùng dataset.
Sau Äây là và dụ vá» má»t directive tùy biến vá»i các thuá»c tÃnh nà y:
<div id="hook-arguments-example" v-demo:foo.a.b="message"></div> |
Vue.directive('demo', { |
Cách khai báo rút gá»n
Trong nhiá»u trÆ°á»ng hợp, có thá» bạn muá»n bind
và update
có chung má»t hà nh vi và không quan tâm Äến các hook khác. Những lúc nà y bạn có thá» dùng cách khai báo directive rút gá»n, và dụ:
Vue.directive('color-swatch', function (el, binding) { |
Truyá»n object trá»±c tiếp
Nếu directive của bạn cần nhiá»u giá trá» cùng má»t lúc, bạn có thá» trá»±c tiếp truyá»n và o má»t object. Nhá» là directive trong Vue có thá» nháºn bất kì biá»u thức JavaScript hợp lá» nà o.
<div v-demo="{ color: 'white', text: 'Su hà o' }"></div> |
Vue.directive('demo', function (el, binding) { |