- vừa được xem lúc

Custom Directives trong Vue 3

0 0 22

Người đăng: Bùi Minh

Theo Viblo Asia

Directives là gì?

Vue Directives là một đoạn lệnh nhỏ mà các bạn có thể chèn chúng vào các phần tử DOM. Tên của các đoạn lệnh đó được bắt đầu bằng tiền tố v- dùng để Vue có thể biết được rằng bạn đang sử dụng một chút đánh dấu đặc biệt và để cho cú pháp được nhất quán.

Custom Directives

Bên cạnh những directive được cung cấp mặc định như (v-modelv-show), Vue cũng cho phép bạn tự tạo directive tùy ý. Chúng gọi là Custom Directives hay tạm dịch là Directives tùy biến. Custom Directive được định nghĩa là đối tượng có chứa lifecycle hooks giống như một Componets. Các hooks của nó nhận vào các phần thử mà đã directive của chúng đã được ràng buộc.

Trong Vue hiện có hai hình thức tái sử dụng code: Components và Composables. Trong khi Components như những khối vuông để lắp ráp xây dựng, thì Composables lại tập trung chủ yếu vào việc tái sử dụng logic trạng thái (Stateful Logic). Mặt khác, Custom Directives lại hữu ích khi muốn sử dụng lại logic liên quan tới việc truy xuất cấp thấp tới các phần tử web.

Ví dụ: Một phần tử input được focus tự động.

const focus = { mounted: (el) => el.focus()
} export default { directives: { // enables v-focus in template focus }
}
<input v-focus />

Nếu bạn chưa click bất kỳ đâu trên web này, chiếc input ở trên sẽ được auto-focus.

Vậy thì, việc cài đặt như thế này khác gì so với thuộc tính autofocus có sẵn? Nó sẽ được auto-focus mỗi khi Vue chèn phần tử này vào, thay vì chỉ thực hiện mỗi khi load trang.

Cũng tương tự như các Components, Custom Directives cần phải được đăng ký để có thể sử dụng trong temple (như trên đoạn code trên).

Người ta cũng rất hay có xu hướng đăng ký Custom Directives gobal để có thể sử dụng lên toàn app:

const app = createApp({}) // make v-focus usable in all components
app.directive('focus', { /* ... */
})

Chú ý: Custom directive chỉ nên sử dụng khi mà bạn cần một chức năng mà bắt buộc phải thao tác với DOM trực tiếp. Hãy sử dụng các Directive có sẵn (Built-in Directives) như là v-bind vì nó hiệu quả hơn và thân thiện với server-rendering nhiều hơn.

Directive Hooks

Directive khi được định nghĩa cung cấp cho ta một số hàm hook (tất cả đều tùy chọn):

const myDirective = { // called before bound element's attributes // or event listeners are applied created(el, binding, vnode, prevVnode) { // see below for details on arguments }, // called right before the element is inserted into the DOM. beforeMount() {}, // called when the bound element's parent component // and all its children are mounted. mounted() {}, // called before the parent component is updated beforeUpdate() {}, // called after the parent component and // all of its children have updated updated() {}, // called before the parent component is unmounted beforeUnmount() {}, // called when the parent component is unmounted unmounted() {}
}

Hook Arguments

Các Directive Hook nhận các đối số sau:

  • el: Chỉ tới phần tử mà Directive liên kết tới. Nó có thể sử dụng luôn để thao tác trực tiếp với DOM.
  • binding: sẽ là một đối tượng có chứa các thuộc tính sau.
    • value: Giá trị được truyền cho Directive. Ví dụ: v-my-directive="1 + 1" sẽ cho ra value 2.
    • oldValue: Giá trị value trước đó, chỉ khả dụng ở trong beforeUpdateupdated, luôn có sẵn không kể giá trị có thay đổi hay không.
    • arg: Đối số được pass cho Directive (nếu có). Ví dụ: v-my-directive:foo, arg sẽ là "foo".
    • modifiers: Một objects chứa các modifer. Ví dụ: v-my-directive.foo.bar modifer sẽ là object: { foo: true, bar: true }
    • instance: Instance của Component mà Directive đang được sử dụng.
    • dir: Object Directive được định nghĩa
    • vnode: Vnode được trình biên dịch của Vue tạo ra.

Tham khảo ví dụ sau:

<div v-example:foo.bar="baz">

Đối số binding sẽ là object kiểu:

{ arg: 'foo', modifiers: { bar: true }, value: /* value of `baz` */, oldValue: /* value of `baz` from previous update */
}

Và cũng tương tự như các directives có sẵn, các đối số của Custom Directive cũng có thể dynamic. Ví dụ:

<div v-example:[arg]="value"></div>

Bài viết được tổng hợp và dịch từ các nguồn: https://vi.vuejs.org/v2/guide/custom-directive.html https://vuejs.org/guide/reusability/custom-directives.html https://viblo.asia/p/gioi-thieu-vue-directives-va-cach-tao-custom-directives-gDVK2Mwr5Lj

Bình luận

Bài viết tương tự

- vừa được xem lúc

Uống Pepsi code Vue đi - Uống Cocacola code React nha ;)

. (Nguồn ảnh: Internet). Chào các bạn, chào các bạn. Let's go . 1.

0 0 130

- vừa được xem lúc

Giới thiệu về Mixins trong Vuejs

Xin chào năm mới năm me! Hôm nay mình sẽ tiếp tục chia sẻ cho các bạn những vấn đề liên quan đến Vuejs. Ở bài trước mình đã giới thiệu về tính năng Filter và lần này, mình xin chia sẻ với các bạn về một khái niệm cũng rất quen thuộc.

0 0 376

- vừa được xem lúc

[Vue3] Tích hợp Vue I18n đơn giản, siêu nhẹ cho các dự án Vue3

Tại sao mình quyết định viết một plugin i18n cho dự án mới. . Lightweight. Chỉ có các feature thật sự cần thiết.

0 0 31

- vừa được xem lúc

Xây dựng chức năng quản lý sản phẩm với Vue + Laravel (Phần 2)

Video được đăng tại channel SUNTECH VIỆT NAM

0 0 13

- vừa được xem lúc

Vue Instance Lifecycle

Chào các bạn. 1.

0 0 75

- vừa được xem lúc

10 Vue Tips

Đôi khi để nghiên cứu một ngôn ngữ nào đó chúng ta phải đọc hàng tá trang docs thì mới moi được cái ý mình cần. Dạo này mình cũng lang thang đọc sang chút Vue chen chân nghề nghiệp nên cũng có lượm lặ

0 0 23