angularjs front-end - It costs 4 mins to read

Angular Scopes in Directives

Scope là một khái niệm quan trọng bậc nhất còn Directive lại là một trong những chức năng mạnh mẽ nhất trong AngularJS. Nếu không hiểu về Scope cũng như không biết cách tận dụng sức mạnh Directive (để DRY Code Front-End) thì không thể xem như Dev đó biết AngularJS rồi. Nếu bạn quan tâm đến AngularJS cũng như Directive trong AngularJS, bạn có thể tìm đọc qua các tài liệu đầy đủ như AngularJS Directive Guide hay qua Ebook này. Trong bài viết này, mình chỉ viết ngắn gọn về một khía cạnh nhỏ: Scope của Directive nhằm mục đích tra cứu và tham khảo của bản thân sau này.

Tài liệu về Scope cho các bạn chưa quen với Scope: Understanding Scopes.

Scope trong Directive

Mọi Directive đều có scope gắn liền với nó. Directive sử dụng scope để access data bên trong template, link, controller. Chúng ta có thể khai báo Scope trong phần định nghĩa Directive theo một trong các giá trị sau:

Một câu hỏi khác cũng khá thú vị khi làm việc với Directive trong AngularJS và nảy ra khi mình đang viết bài này, đó là :

Phân biệt compile function, link function, controller function trong AngularJS Directive??

Nhiều lúc mình dùng loạn cả lên, bình thường thì dùng controller, khi thích thì dùng link function. (Hiếm khi dùng compile function)

Mình tìm được một bài khá chi tiết của một Dev người Việt trên Quora. Và đây là đáp án - TLDR:

Here is the rules for those functions

Khác biệt cơ bản là Compile sẽ chạy trước tiên, trước khi DOM compile hoàn tất. Controller chạy sau Compile nhưng cũng trước khi DOM hoàn tất nhưng controller không can thiệp được vào DOM. Link chạy sau khi compile và có thể modify DOM.

Một quy ước chung của Angular: Write business logic in controller and DOM manipulation in link.

Phiên bản AngularJS 2.0 cũng sắp chính thức ra mắt, mình vẫn chưa tìm hiểu nên không biết có thay đổi gì nhiều liên quan đến scope không. Phải tìm hiểu mới được, hẹn các bạn ở một dịp khác.