NOTE! You are browsing legacy documentation. For latest visit docs.nativescript.org.

NativeScript Angular

Ng Directives

The following examples shows how to use Angular structural directives in NativeScript application.

Create Custom Directive

HTML

<GridLayout *sdkIfAndroid width="300" height="300" backgroundColor="#a4c639" borderRadius="150"></GridLayout>
<GridLayout *sdkIfIos width="300" height="300" backgroundColor="#0099CC" borderRadius="2"></GridLayout>

TypeScript

import { Component, Directive, ViewContainerRef, TemplateRef, Inject } from "@angular/core";
import { Device, platformNames } from "tns-core-modules/platform";
import { DEVICE } from "nativescript-angular/platform-providers";

@Directive({ selector: "[sdkIfAndroid]" })
export class IfAndroidDirective {
    constructor( @Inject(DEVICE) device: Device, container: ViewContainerRef, templateRef: TemplateRef<Object>) {
        if (device.os === platformNames.android) {
            container.createEmbeddedView(templateRef);
        }
    }
}

@Directive({ selector: "[sdkIfIos]" })
export class IfIosDirective {
    constructor( @Inject(DEVICE) device: Device, container: ViewContainerRef, templateRef: TemplateRef<Object>) {
        if (device.os === platformNames.ios) {
            container.createEmbeddedView(templateRef);
        }
    }
}

@Component({
    moduleId: module.id,
    templateUrl: "./create-custom-directive.component.html",
})
export class CreateCustomDirectiveExampleComponent {
}

Custom Unless Directive

Directive code (Typescript)

HTML

<GridLayout *sdkUnless="condition" width="150" height="150" margin="30" borderRadius="125" backgroundColor="green">
    <Label text="Access granted!" class="p-15" color="white" textWrap="true" horizontalAlignment="center" verticalAlignment="center"></Label>
</GridLayout>
<GridLayout *sdkUnless="!condition" width="150" height="150" margin="30" borderRadius="125" backgroundColor="red">
    <Label text="Access not granted!" class="p-15" color="white" textWrap="true" horizontalAlignment="center" verticalAlignment="center"></Label>
</GridLayout>

Typescript

import { Component } from "@angular/core";

@Component({
    moduleId: module.id,
    templateUrl: "./unless-directive.component.html",
})
export class CustomUnlessComponent {

    public age: number;
    public condition: boolean;

    constructor() {
        this.condition = true;
    }

    onTap(args) {
        console.log("onTap age is :" + this.age);

        if (this.age >= 18 && this.age !== 0) {
            this.condition = false;
        } else {
            this.condition = true;
        }
    }
}

Ngfor Directive

*ngFor structural directive usage in NativeScript + Angular-2+ A structural directive that renders a template for each item in a array or collection. The directive is placed on an element, which result in repeating the section or template.

HTML

<StackLayout *ngFor="let fruit of fruitList" class="list-group-item">
    <Label [text]="fruit"></Label>
</StackLayout>

Typescript

import { Component } from "@angular/core";
import { fruits } from "./fruits";

@Component({
    moduleId: module.id,
    templateUrl: "./ngfor-directive.component.html",
})
export class NgForComponent {
    public fruitList: Array<string> = [];

    constructor() {
        this.fruitList = fruits;
    }
}

Ngif Directive

*ngIf structural directive basic usage in NativeScript + Angular-2

HTML

<Button text="Show/hide block" (tap)="onTap()" class="btn btn-primary btn-active"></Button>
<GridLayout *ngIf="isVisible" class="bg-primary" borderRadius="2" height="300"></GridLayout>

Typescript

import { Component } from "@angular/core";

@Component({
    moduleId: module.id,
    templateUrl: "./ngif-directive.component.html",
})
export class NgIfComponent {
    public isVisible: boolean = true;

    onTap() {
        if (this.isVisible) {
            this.isVisible = false;
        } else  {
            this.isVisible = true;
        }
    }
}

Ngif Directive Advanced

*ngIf structural directive example usage for platform specific elements

HTML

<GridLayout *ngIf="isAndroid" width="150" height="300" margin="30" borderRadius="125" backgroundColor="green">
    <Label text="This content is visible only for Android" textWrap="true" verticalAlignment="center" class="p-15"></Label>
</GridLayout>
<GridLayout *ngIf="isIos" width="150" height="300" margin="30" borderRadius="125" backgroundColor="green">
    <Label text="This content is visible only for iOS" textWrap="true" verticalAlignment="center" class="p-15"></Label>
</GridLayout>

TypeScript

import { Component, OnInit } from "@angular/core";
import * as application from "tns-core-modules/application";

@Component({
    moduleId: module.id,
    templateUrl: "./ngif-directive-advanced.component.html",
})
export class NgIfAdvancedComponent implements OnInit {
    public isAndroid: boolean;
    public isIos: boolean;

    ngOnInit() {
        if (application.ios) {
            this.isAndroid = false;
            this.isIos = true;
        } else if (application.android) {
            this.isAndroid = true;
            this.isIos = false;
        }
    }
}

Ngswitch Directive

ngSwitch structural directive basic usage in NativeScript + Angular-2

HTML

<FlexboxLayout row="0" flexDirection="row">
    <Button flexShrink="0" class="btn btn-primary btn-active" margin="15" width="80" text="Blue" (tap)="onBlue()"></Button>
    <Button flexShrink="0" class="btn btn-primary btn-active" margin="15" width="80" text="Purple" (tap)="onPurple()"></Button>
    <Button flexShrink="0" class="btn btn-primary btn-active" margin="15" width="80" text="Yellow" (tap)="onYellow()"></Button>
</FlexboxLayout>

<GridLayout row="1" [ngSwitch]="color" class="p-15 m-t-15" height="280" borderRadius="2">
    <GridLayout *ngSwitchCase="'purple'" backgroundColor="#8C489F"></GridLayout>
    <GridLayout *ngSwitchCase="'blue'" backgroundColor="#0077AF"></GridLayout>
    <GridLayout *ngSwitchCase="'yellow'" backgroundColor="#FFFF66"></GridLayout>
    <GridLayout *ngSwitchDefault backgroundColor="gray"></GridLayout>
</GridLayout>

Typescript

import { Component } from "@angular/core";

@Component({
    moduleId: module.id,
    templateUrl: "./ngswitch-directive.component.html",
})
export class NgSwitchComponent {
    public color: string;

    onBlue() {
        this.color = "blue";
    }

    onPurple() {
        this.color = "purple";
    }

    onYellow() {
        this.color = "yellow";
    }
}