Wie um bedingt einfügen/entfernen von host-DOM-element in den Winkel-2 Richtlinie
Ich möchte erstellen Sie eine Richtlinie, die wird entscheiden, ob Sie sollte oder sollte nicht Ihre host-element apppear auf der Seite. Idealerweise würde ich es gerne entfernen das element aus dem DOM und nicht nur ein - /ausblenden mit css. Anwendungsfall ist:
<ul role="navigation">
<li><a>public link</a></li>
<li><a>public link2</a></li>
<li access="admin"><a>admin-only link</a></li>
</ul>
Würde es UserService zu bekommen currentUser Rollen und, wenn es keine admin es die li
entfernt werden würde.
Ich glaube, ich könnte den gleichen Effekt erzielen, mit ng-if
(falls es noch erhältlich in den Winkel-2), indem der Ausdruck evaulate in die main-Komponente. Aber mit der Anwendung der Richtlinie, mehr semantische und elegant.
Ist es möglich?
import {Directive} from 'angular2/angular2';
@Directive({
selector: 'access'
})
export class Access {
//what goes here
}
Konnte ich habe leicht getan, im Winkel 1 (innere Richtlinie compile
- Funktion), aber wie kann ich dies tun, im Winkel 2?
- Ich habe eine Richtlinie, die in meinem github repo hier, github.com/IbraheemAlSaady/angular-role-restrict-directive/tree/... der code ist ein wenig anders, was Sie wollen, aber es könnte Ihnen helfen, bauen Sie Ihre eigenen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Umsetzung wird ähnlich zu dem, was ngIf-Richtlinie ist. Und die Eckige Handbuch für strukturelle Richtlinien (die Sie planen zu erstellen, zu) gibt ein Beispiel für
myUnless
dass gerade kehrtngIf
.Ihnen die Umsetzung für den Zugang wird ähnlich Aussehen wie die
myUnless
Umsetzung.Und verwenden Sie es wie:
<li *access="isAdmin"><a>admin-only link</a></li>
Entfernen Sie ein element aus der DOM ist fertig mit der
*ngIf
Richtlinie.Aber wenn Sie wirklich darauf bestehen, über die Verwendung Ihrer eigenen Richtlinie, glaube ich ElementRef ist der Weg zu gehen. Obwohl, ich würde keine Ratschläge, die auf die Verwendung dieser
Bekommen Sie so etwas wie dieses:
*ngIf
ist viel intuitiver, und verlässt das DOM Bearbeiten zu eckigaccess
Attribut, sondern in der constuructor ist es noch nicht verfügbar - es istundefined
removeChild()
: "die Manipulation des DOM-direkt ist eine Praxis, die wir lieber vermeiden, weil es Ketten, die uns zu den browser-DOM-API... Der rendering-phase könnte ausgelagert werden, um eine Web-Worker für höhere Leistung. Unsere Richtlinie könnte funktionieren, wenn wir liefen die Anwendung außerhalb des Browsers, vielleicht auf dem server in einer pre-render-phase".