2017-04-20 31 views
5

Tôi đang cố gắng tạo một chỉ thị hoạt động như một ngNếu kiểm soát nếu người dùng có quyền chính xác cho phép xem nội dung cụ thể, như sau:Chỉ thị hoạt động như ng-if (Góc 2)

<div [type-of-user]="load data from the user and check it (normal or premium)"> 
    <h3>You are allow to see this.</h3> 
</div> 

tôi đã đọc về làm thế nào để làm điều đó và tìm thấy trên doc này về "Attribute Chỉ thị", nhưng tôi vẫn không thể thực hiện nó (tôi mới với góc 2)

cho đến nay tôi có điều này:

import {Directive, ElementRef, Input} from '@angular/core'; 

@Directive({ 
    selector: '[type-of-user]' 
}) 

export class TypeOfUserDirective{ 

    constructor(private el: ElementRef){} 

    @Input('type-of-user') userControl: string; 

    private haspermission(permission: string) { 
    /*the style background color is just to test if works*/ 
    this.el.nativeElement.style.backgroundColor = permission; 
    } 

} 

Tôi đã thêm chỉ thị trong app.module.

Mọi lời khuyên về cách tiến hành sẽ tuyệt vời.

+0

nếu bạn đang tìm kiếm cho 'trạng if' bạn đang cố gắng để tái phát minh ra bánh xe .. kiểm tra [* ngIf] (https://angular.io/ docs/ts/latest/guide/template-syntax.html #! # ngIf) –

+0

chỉ thị được sử dụng để sửa đổi nội dung của người dùng, vì vậy hãy cố gắng tiêm một số nội dung để chỉ thị và sửa đổi nội dung đó. –

+0

Cảm ơn lời khuyên của bạn, cuối cùng tôi có thể làm cho nó chỉ chỉnh sửa một plunkr tôi tìm thấy về chỉ thị và một bài viết tuyệt vời. @RomanC –

Trả lời

3

Sau một số nghiên cứu khác, tôi đã tìm thấy một tài liệu tuyệt vời về cách xây dựng chỉ thị tùy chỉnh, cụ thể theo cách tôi cần, hoạt động như một chỉ thị ngIf. Bạn có thể đọc về nó here và xem plunkr here

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; 

@Directive({ 
    selector: '[isAllow]' 
}) 

export class isAllowDirective { 

    constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef) {} 

    @Input() set isAllow(allow: boolean){ 
    if (allow) { 
     // If condition is true add template to DOM 
     this.viewContainer.createEmbeddedView(this.templateRef); 
    } else { 
    // Else remove template from DOM 
     this.viewContainer.clear(); 
    } 

    } 

} 
+0

Bạn cũng có thể tìm thấy bài viết này hữu ích [Khám phá kỹ thuật thao tác DOM góc bằng cách sử dụng ViewContainerRef] (https: // blog.angularindepth.com/exploring-angular-dom-abstractions-80b3ebcfc02) –

Các vấn đề liên quan