-
-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[DONE] Day040 content: Custom Structural Directive #18
base: master
Are you sure you want to change the base?
[DONE] Day040 content: Custom Structural Directive #18
Conversation
@januaryofmine Cảm ơn em nhé. Để lát anh review 🤞 |
Em có update 1 số content ở bài này. Các anh đọc commit mới nhất nhen. Em cảm ơn. |
@@ -0,0 +1,275 @@ | |||
# Day 40: Custom Structural Directive trong Angular |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nartc Đại ca review day 40 nhé. Trong quãng đời 4 năm em chưa viết custom structural directive bao giờ nên nghĩ là em ko nên review bài này 😂😂
@@ -236,7 +256,7 @@ Container có thể chứa các container khác (ng-container chẳng hạn) t | |||
|
|||
Đây là 1 class nhận vào các component để load dynamic và tạo ra 1 component factory của component đó. ViewContainerRef sẽ dùng **ComponentFactory** đó để load dynamic các components. | |||
|
|||
## Exercies | |||
## Exercise |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@januaryofmine Nếu em dùng VSCode để viết markdown thì có mấy cái extension khá hữu ích, có khi em cài rồi nhưng anh cứ note ra.
-
https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker - Để check chính tả và spelling. Tránh lỗi như em phải sửa sai spelling như ở dòng này.
-
https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one - Để format, tạo table of content etc cho markdown. Nhưng hình như khi turn on thì type tiếng Việt ko có được 😂
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@trungk18
dạ, em cảm ơn a. v có gì a giúp em xem day 39 với day 41 với. Em cảm ơn anh.
|
||
### Step 3: Code directive logic | ||
|
||
Chúng ta sẽ inject **ElementRef** vào constructor của directive như sau: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@januaryofmine Em có ví dụ nào thực tế hơn chút không? Vì directive này thật ra thực tế 99% là mình sẽ ko dùng đến. Nên nếu lấy đc một ví dụ nào đó em đã từng dùng thì sẽ dể để mọi người hình dung hơn. Chứ một directive để hiện lên một đoạn demo text và hover với color khác thì nếu là anh, anh sẽ viết CSS cho nhanh 😂
Đa phần custom directive anh viết thì để wrap cái element với một thư viện nào đấy chưa có sẵn cho Angular. Thì anh nghĩ đây là một use case khá phổ biến.
@Directive({ selector: "[jsTree]" })
export class JsTreeDirective implements AfterViewInit {
@Input() jsTree: any;
constructor(private el: ElementRef, private zone: NgZone) {
this.jsTree = this.jsTree || {}
}
ngAfterViewInit(): void {
try {
runOutsideAngular(this.zone, () => {
let jsTreeElement = $(this.el.nativeElement);
jsTreeElement.jstree(this.jsTree).bind("select_node.jstree", function (e, data) {
var href = data.node.a_attr.href;
if (href.indexOf('#') === -1)
document.location.href = href;
});
jsTreeElement.removeClass("hidden");
})
} catch (error) { }
}
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dạ. Em trong quá trình research về attribute directive, em thường thấy các use-cases demo là dùng để thay đổi styling hay attributes có sẵn của thẻ. em nghĩ directive này 1 ví dụ. Trong lúc xây dựng ví dụ, em tập trung vào sự dễ hiểu, để các bạn có thể nhanh chóng grab idea và ứng dụng theo ý các bạn. Vậy nên bản thân ví dụ sẽ đơn giản, không có tính sử dụng trực tiếp nhưng sẽ có tính tham khảo để custom nhanh theo business. Ngoài ra sự khác biệt của attribute directive và css em nghĩ đó là tính reuseable. Em thấy directive sẽ reuse dễ dàng hơn.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Em cũng bám khá sát ví dụ từ official docs của Angular. Ở đây nó build 1 example tương tự thế này nè anh: https://angular.io/guide/attribute-directives
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ừ anh hiểu ý, nhưng vì mình làm series nên nếu ví dụ sát thực tế hơn tý cũng đẹp trai hơn mà. Vì nhiều ví dụ trên Angular docs anh thấy tính thực tiễn cũng hơi thấp 🤣 Anw ý kiến chủ quan của anh thôi, chứ content hiện tại cũng rất là tốt rồi nhé.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ví dụ gì mà dùng jquery thế này....
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dạ, ý của a @trungk18 là wrap thư viện lại. Còn project của em không có dùng jquery.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
một directive khá phổ biến là để truyền vào permissions, sau đó check list available rồi xem có render một template hay ko. https://github.com/AlexKhymenko/ngx-permissions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dạ a. v giờ em sửa lại demo ha a @tieppt.
Work in progress. Structure for Day 40 Custom Structural Directive.