Create NativeScript App with Angular

Create NativeScript App with Angular

16 July 2020

Angular has been around for a few years and, it has been useful when creating many different categories of applications, including web and mobile applications.

Some developers feel that the experience for creating these various applications can be inconsistent and confusing, even though driving technology has always been the same.

However, with custom schematics, it can be used with the official Angular CLI. This allows us to create a project with the Angular CLI, add a schematic, i.e NativeScript, and end up with CLI compatible for both web and mobile.

In this tutorial, we will use the Angular CLI to build a web and mobile compatible application with the NativeScript schematics.

Step 1: Installing the NPM dependencies

Before we create and maintain the NativeScript application from the Angular CLI, we need to make sure we have all NPM dependencies available on our machine. Install Node.js® and npm if they are not already available on your machine. Now, let’s execute the following from the command line to install Angular CLI:

npm install @angular/cli@6.1.0-beta.0

NativeScript_App_with_Angular_01

Step 2: Creating an Angular CLI Project with NativeScript Support

Remember that the angular schematics are only for creating and maintaining projects. The NativeScript CLI is still required for building and deploying mobile applications.

Let’s navigate into the project angular-native-project and execute the command below to install NativeScript CLI along with the NativeScript schematics.

npm install nativescript@rc
npm install --save-dev @nativescript/schematics@rc

NativeScript_App_with_Angular_02

Now that we have all the dependencies in place it’s time to add NativeScript support to our new Angular CLI project. Open to the command line, and execute the following command:

ng new angular-native-project

The above will create a new Angular project, which by default, will be for web applications, not native mobile applications.

NativeScript_App_with_Angular_03

You have to be in a project that was created with the Angular CLI, so if you had created a NativeScript project with the NativeScript CLI, the schematics can’t be included.

ng add @nativescript/schematics

NativeScript_App_with_Angular_04

Code-Sharing Project:

We can also create a code-sharing project directly, which allows you to build for both web and mobile, by providing a –shared flag. Like this:

ng new -c=@nativescript/schematics angular-native-project2 --prefix=my --no-theme --style=scss --no-webpack

NativeScript_App_with_Angular_05

Step 3: Schematic Changes and Angular Development Process

After adding the NativeScript schematics to our project, you’ll notice that some new files with .tns extension have been created and a few of the configuration files altered. Check the project directory to see the .tns.ts and .tns.html files.

NativeScript_App_with_Angular_06

NativeScript is a native mobile application framework which means we can’t use standard HTML markup for the UI. For this reason, we will have to maintain a web UI and a NativeScript UI. We can have a web version and a NativeScript version for everything when it comes to the TypeScript, but we don’t need to.

But, it makes sense is in the modules and routing areas since there are services like NativeScriptRoutingModule and RoutingModule which accomplish the same, but are specific to the platform.

Let’s modify our new project so that we can have different platforms under a single CLI. Copy the src/app/app-routing.module.tns.ts file to src/app/app.routing.ts and make it look like the following:

NativeScript_App_with_Angular_07

The only difference here is in the naming of the modules being used. Since this file is going to be used for the web, we have removed the tns from the filename and used the vanilla Angular modules.

Next, we need to alter the project’s src/app/app.module.ts file to be more aligned with the NativeScript version:

NativeScript_App_with_Angular_08

The last step is to modify the src/app/app.component.html file. The Angular project has a default landing page with no routing, at the time of writing. So we need to finish the routing setup. Open src/app/app.component.html, and replace everything with the following:

<router-outlet></router-outlet>

We’re trying to match the behavior between the two applications. As the application is fresh, the NativeScript version accomplished a lot more than the simple web version. The initial content further validated this.

At this point, our project is done. But, what if we create need a new component going forward? Let’s try the following command:

ng g component home

The above command will use the CLI and create a component called home. As a result, we’ll see the following files getting created:

  • src/app/home/home.component.css
  • src/app/home/home.component.html
  • src/app/home/home.component.tns.html
  • src/app/home/home.component.ts
  • src/app/home/home.component.spec.ts

NativeScript_App_with_Angular_09

We can use the Angular CLI like we would any other Angular application. And we’ll end up with a .tns.html file that we can add your custom UI for mobile to.

Step 4: Running an Angular CLI Project on Android or iOS with the NativeScript CLI

With the project created, altered, and ready to go, we can now run the application. To test if the project still works as a web application, let’s execute the following:

ng serve

Once the command completes, Visit http://localhost:4200 in your web browser to see it in action. To run the application on a mobile device, we will execute the following command:

tns run ios --bundle

The command above will run the application on iOS. And we can easily switch the ios part for android if needed. The most important part of the command is the –bundle flag. If we don’t bundle the application, it will crash with a lot of errors.

Conclusion

We just created your first NativeScript Android and iOS application using the Angular JavaScript framework. This is huge because now NativeScript becomes superior to similar Angular frameworks like Ionic 2. NativeScript is now being able to build native applications, eliminating a common web view.

Note: NativeScript projects build native mobile applications. For this reason, we can recycle the logic, but separate UI components must exist. This is important because with this we can give our mobile and web applications a separate, but very polished user experience.

Request a quote