NativeScript - Applicazione angolare

Creiamo una semplice applicazione bare bone per comprendere il flusso di lavoro dell'applicazione NativeScript.

Creazione dell'applicazione

Impariamo come creare una semplice applicazione usando NativeScript CLI, tns. tns fornisce un comando create da utilizzare per creare un nuovo progetto in NativeScript.

La sintassi di base per creare una nuova applicazione è la seguente:

tns create <projectname> --template <template_name>

Dove,

  • Projectname è il nome del progetto.

  • template_nameè il modello di progetto. NativeScript fornisce molti modelli di avvio per creare diversi tipi di applicazione. Usa un modello basato su Angular.

Creiamo una nuova directory denominata NativeScriptSamples per lavorare sulla nostra nuova applicazione. Ora apri un nuovo terminale, quindi spostati nella nostra directory e digita il comando seguente:

tns create BlankNgApp --template tns-template-blank-ng

Dove, tns-template-blank-ng fa riferimento a un'applicazione mobile vuota basata su AngularJS.

Produzione

..... 
..... 
..... 
Project BlankNgApp was successfully created. 
Now you can navigate to your project with $ cd BlankNgApp 
After that you can preview it on device by executing $ tns preview

Ora viene creata la nostra prima applicazione mobile, BlankNgApp .

Struttura dell'applicazione

Cerchiamo di comprendere la struttura dell'applicazione NativeScript analizzando la nostra prima applicazione BlankNgApp in questo capitolo. L'applicazione NativeScript è organizzata in più sezioni e sono le seguenti:

  • Sezione di configurazione

  • Moduli del nodo

  • Fonti Android

  • Fonti iOS

  • Codice sorgente dell'applicazione

La struttura generale dell'applicazione è la seguente:

│ angular.json 
│ LICENSE 
│ nsconfig.json 
│ package-lock.json 
│ package.json 
│ tsconfig.json 
│ tsconfig.tns.json 
│ tsfmt.json 
│ webpack.config.js 
│
├───App_Resources 
│  ├───Android 
│  │ 
│  └───iOS 
│ 
├───hooks 
│ 
├───node_modules 
| 
└───src 
   │ app.css 
   │ main.ts 
   │ package.json 
   │ 
   └───app 
      │  app-routing.module.ts 
      │  app.component.html 
      │  app.component.ts 
      │  app.module.ts 
      │ 
      └───home 
         home-routing.module.ts 
         home.component.html 
         home.component.ts 
         home.module.ts

Facci capire ogni sezione dell'applicazione e come ci aiuta a creare la nostra applicazione.

Sezione di configurazione

Tutti i file nella radice dell'applicazione sono file di configurazione. Il formato dei file di configurazione è in formato JSON, che aiuta lo sviluppatore a comprendere facilmente i dettagli di configurazione. L'applicazione NativeScript si basa su questi file per ottenere tutte le informazioni di configurazione disponibili. Esaminiamo tutti i file di configurazione in questa sezione.

package.json

Il file package.json imposta l'identità (id) dell'applicazione e tutti i moduli da cui l'applicazione dipende per il suo corretto funzionamento. Di seguito è riportato il nostro package.json -

{ 
   "nativescript": {
      "id": "org.nativescript.BlankNgApp",
      "tns-android": {
         "version": "6.3.1"
      }, "tns-ios": {
         "version": "6.3.0"
      } 
   }, "description": "NativeScript Application", 
   "license": "SEE LICENSE IN <your-license-filename>", 
   "repository": "<fill-your-repository-here>", 
   "dependencies": { 
      "@angular/animations": "~8.2.0", 
      "@angular/common": "~8.2.0", 
      "@angular/compiler": "~8.2.0", 
      "@angular/core": "~8.2.0", 
      "@angular/forms": "~8.2.0", 
      "@angular/platform-browser": "~8.2.0", 
      "@angular/platform-browser-dynamic": "~8.2.0", 
      "@angular/router": "~8.2.0", 
      "@nativescript/theme": "~2.2.1", 
      "nativescript-angular": "~8.20.3", 
      "reflect-metadata": "~0.1.12", 
      "rxjs": "^6.4.0", 
      "tns-core-modules": "~6.3.0", 
      "zone.js": "~0.9.1" 
   }, 
   "devDependencies": { 
      "@angular/compiler-cli": "~8.2.0", 
      "@ngtools/webpack": "~8.2.0", 
      "nativescript-dev-webpack": "~1.4.0", 
      "typescript": "~3.5.3" 
   }, 
   "gitHead": "fa98f785df3fba482e5e2a0c76f4be1fa6dc7a14", 
   "readme": "NativeScript Application" 
}

Qui,

Identity of the application (nativescript/id)- Imposta l'ID dell'applicazione come org.nativescript.BlankNgApp. Questo ID viene utilizzato per pubblicare la nostra app su Play Store o iTunes. Questo ID sarà il nostro identificatore dell'applicazione o il nome del pacchetto.

Dependencies (dependencies)- Specifica tutti i nostri moduli del nodo dipendente. Poiché l'implementazione predefinita di NativeScript dipende da Angular Framework, sono inclusi i moduli Angular.

Development dependencies- Specifica tutti gli strumenti da cui dipende l'applicazione. Poiché stiamo sviluppando la nostra applicazione in TypeScript, include il dattiloscritto come uno dei moduli dipendenti.

angular.json - Informazioni sulla configurazione del framework angolare.

nsconfig.json - Informazioni sulla configurazione del framework NativeScript.

tsconfig.json, tsfmt.json & tsconfig.tns.json - Informazioni sulla configurazione del linguaggio TypeScript

webpack.config.js - Configurazione WebPack scritta in JavaScript.

Moduli del nodo

Poiché i progetti NativeScript sono progetti basati su nodi, memorizza tutte le sue dipendenze nella cartella node_modules. Possiamo usare npm (npm install) o tns per scaricare e installare tutte le dipendenze dell'applicazione in node_moduels.

Codice sorgente Android

NativeScript genera automaticamente il codice sorgente Android e lo inserisce nella cartella App_Resources \ Android. Verrà utilizzato per creare applicazioni Android utilizzando Android SDK

Codice sorgente iOS

NativeScript genera automaticamente il codice sorgente iOS e lo inserisce nella cartella App_Resources \ iOS. Verrà utilizzato per creare applicazioni iOS utilizzando iOS SDK e XCode

Codice sorgente dell'applicazione

Il codice dell'applicazione effettivo viene inserito nella cartella src. La nostra applicazione ha i file seguenti nella cartella src.

└───src 
   │ app.css 
   │ main.ts 
   │ package.json 
   │ 
   └───app 
   │ app-routing.module.ts 
   │ app.component.html 
   │ app.component.ts 
   │ app.module.ts 
   │ 
   └───home 
         home-routing.module.ts 
         home.component.html 
         home.component.ts 
         home.module.ts

Cerchiamo di capire lo scopo di tutti i file e come sono organizzati in questa sezione -

Passo 1

main.ts - Punto di ingresso dell'applicazione.

// this import should be first in order to load some required settings (like globals and reflect-metadata) 
import { platformNativeScriptDynamic } from "nativescript-angular/platform";
import { AppModule } from "./app/app.module"; 
platformNativeScriptDynamic().bootstrapModule(AppModule);

Qui, abbiamo impostato AppModule come modulo di avvio dell'applicazione.

Passo 2

app.css - Il foglio di stile principale dell'applicazione è come mostrato di seguito -

@import "[email protected]/theme/css/core.css"; 
@import "[email protected]/theme/css/brown.css"; 
/* Place any CSS rules you want to apply on both iOS and Android here. 
This is where the vast majority of your CSS code goes. */

Qui,

app.css importa il foglio di stile principale e il foglio di stile dei temi colore marrone del framework NativeScript.

Passaggio 3

app \ app.module.ts - Modulo radice dell'applicazione.

import { NgModule, NO_ERRORS_SCHEMA } from "@angular/core";
import { NativeScriptModule } from "nativescript-angular/nativescript.module";
import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";
@NgModule(
   {
      bootstrap: [
         AppComponent
      ], 
      imports: [
         NativeScriptModule,
         AppRoutingModule
      ], 
      declarations: [
         AppComponent
      ], schemas: [
         NO_ERRORS_SCHEMA
      ]
   }
)
export class AppModule { }

Qui,

AppModule viene creato sulla base di NgModule e imposta i componenti ei moduli dell'applicazione. Importa due moduli NativeScriptModule e AppRoutingModule e un componente, AppComponent. Inoltre imposta l'AppComponent come componente principale dell'applicazione.

Passaggio 4

app.component.ts - Componente principale dell'applicazione.

import { Component } from "@angular/core"; 
@Component(
   { 
      selector: "ns-app", 
      templateUrl: "app.component.html" 
   }
) 
export class AppComponent { }

Qui,

AppComponent imposta il modello e il foglio di stile del componente. Il modello è progettato in HMTL semplice utilizzando i componenti dell'interfaccia utente di NativeScript.

Passaggio 5

app-routing.module.ts - Modulo di instradamento per AppModule

import { NgModule } from "@angular/core"; 
import { Routes } from "@angular/router"; 
import { NativeScriptRouterModule } from "nativescript-angular/router"; 
const routes: Routes = [
   { path: "", redirectTo: "/home", pathMatch: "full" },
   { path: "home", loadChildren: () =>
   import("~/app/home/home.module").then((m) => m.HomeModule) } 
];
@NgModule(
   {
      imports: [NativeScriptRouterModule.forRoot(routes)], 
      exports: [NativeScriptRouterModule] 
   }
)
export class AppRoutingModule { }

Qui,

AppRoutingModule usa NativeScriptRouterModule e imposta i percorsi di AppModule. Fondamentalmente reindirizza il percorso vuoto a / home e punta la / home a HomeModule.

Passaggio 6

app \ home \ home.module.ts - Definisce un nuovo modulo, HomeModule.

import { NgModule, NO_ERRORS_SCHEMA } from "@angular/core";
import { NativeScriptCommonModule } from "nativescript-angular/common";
import { HomeRoutingModule } from "./home-routing.module";
import { HomeComponent } from "./home.component";
@NgModule(
   {
      imports: [
         NativeScriptCommonModule,
         HomeRoutingModule
      ],
      declarations: [
         HomeComponent
      ],
      schemas: [
         NO_ERRORS_SCHEMA
      ]
   }
)
export class HomeModule { }

Qui,

HomeModule importa due moduli, HomeRoutingModule e NativeScriptCommonModule e un componente HomeComponent

Passaggio 7

app \ home \ home.component.ts: definisce il componente Home e viene utilizzato come home page dell'applicazione.

import { Component, OnInit } from "@angular/core";
@Component(
   {
      selector: "Home", templateUrl: "./home.component.html" 
   }
) 
export class HomeComponent implements OnInit { 
   constructor() { 
      // Use the component constructor to inject providers. 
   } 
   ngOnInit(): void { 
      // Init your component properties here. 
   } 
}

Qui,

HomeComponent imposta il modello e il selettore del componente Home.

Passaggio 8

app \ home \ home-routing.module.ts - Modulo di routing per HomeModule e utilizzato per definire il routing per il modulo home.

import { NgModule } from "@angular/core"; 
import { Routes } from "@angular/router"; 
import { NativeScriptRouterModule } from "nativescript-angular/router"; 
import { HomeComponent } from "./home.component"; 
const routes: Routes = [
   { path: "", component: HomeComponent } 
]; 
@NgModule(
   { 
      imports: [NativeScriptRouterModule.forChild(routes)], 
      exports: [NativeScriptRouterModule] 
   }
) 
export class HomeRoutingModule { }

Qui,

HomeRoutingModule imposta il percorso vuoto su HomeComponent.

Passaggio 9

app.component.html e home.component.html: vengono utilizzati per progettare l'interfaccia utente dell'applicazione utilizzando i componenti dell'interfaccia utente NativeScript.

Esegui la tua app

Se desideri eseguire la tua app senza utilizzare alcun dispositivo, digita il comando seguente:

tns preview

Dopo aver eseguito questo comando, questo genererà il codice QR per scansionare e connettersi con il tuo dispositivo.

Produzione

QRCode

Ora il codice QR viene generato e connettiti a PlayGround nel passaggio successivo.

NativeScript PlayGround

Apri l'app NativeScript PlayGround sul tuo dispositivo mobile iOS o Android, quindi scegli l' opzione Scansiona codice QR . Aprirà la fotocamera. Metti a fuoco il codice QR visualizzato sulla console. Questo eseguirà la scansione del codice QR. La scansione del codice QR attiverà la build dell'applicazione e quindi sincronizzerà l'applicazione sul dispositivo come indicato di seguito:

Copying template files... 
Platform android successfully added. v6.3.1 
Preparing project... 
File change detected. Starting incremental webpack compilation... 
webpack is watching the files… 
Hash: 1f38aaf6fcda4e082b88 
Version: webpack 4.27.1 
Time: 9333ms 
Built at: 01/04/2020 4:22:31 PM
               Asset          Size        Chunks         Chunk Names 
               0.js           8.32 KiB     0     [emitted] 
          bundle.js           22.9 KiB    bundle [emitted] bundle 
       package.json          112 bytes           [emitted] 
         runtime.js             73 KiB   runtime [emitted] runtime 
tns-java-classes.js            0 bytes  [emitted] 
          vendor.js            345 KiB   vendor  [emitted] vendor 
Entrypoint bundle = runtime.js vendor.js bundle.js 
[../$$_lazy_route_resource lazy recursive] ../$$_lazy_route_resource lazy 
namespace object 160 bytes {bundle} [built] [./app.css] 1.18 KiB {bundle} [built] [./app/app-routing.module.ts] 688 bytes {bundle} [built] 
[./app/app.component.html] 62 bytes {bundle} [built] 
[./app/app.component.ts] 354 bytes {bundle} [built] 
[./app/app.module.ts] 3.22 KiB {bundle} [built] 
[./app/home/home.module.ts] 710 bytes {0} [built] 
[./main.ts] 1.84 KiB {bundle} [built] 
[@angular/core] external "@angular/core" 42 bytes {bundle} [built] [nativescript-angular/nativescript.module] external "nativescript-
angular/nativescript.module" 42 bytes {bundle} [built] 
[nativescript-angular/platform] external "nativescript-angular/platform" 42 
bytes {bundle} [built] [tns-core-modules/application] external "tns-core-
modules/application" 42 bytes {bundle} [built] 
[tns-core-modules/bundle-entry-points] external "tns-core-modules/bundle-entry-points" 42 
bytes {bundle} [built] 
[tns-core-modules/ui/frame] external "tns-core-
modules/ui/frame" 42 bytes {bundle} [built] 
[tns-core-modules/ui/frame/activity] external "tns-core-
modules/ui/frame/activity" 42 bytes {bundle} [built] 
   + 15 hidden modules Webpack compilation complete. Watching for file changes. 
Webpack build done! 
Project successfully prepared (android) 
Start sending initial files for device Bala Honor Holly (ff5e8622-7a01-4f9c-
b02f-3dc6d4ee0e1f). 
Successfully sent initial files for device Bala Honor Holly (ff5e8622-7a01-4f9c-b02f-3dc6d4ee0e1f). 
LOG from device Bala Honor Holly: HMR: Hot Module Replacement Enabled. Waiting for signal. 
LOG from device Bala Honor Holly: Angular is running in the development mode. 
Call enableProdMode() to enable the production mode.

Produzione

Dopo la scansione, dovresti vedere la tua BlankNgApp sul tuo dispositivo. È mostrato di seguito -

Esegui la tua app sul dispositivo

Se desideri testare il dispositivo connesso nella tua applicazione, puoi verificarlo utilizzando la sintassi seguente:

'tns device <Platform> --available-devices'

Successivamente, puoi eseguire la tua app utilizzando il comando seguente:

tns run

Il comando precedente viene utilizzato per creare le tue app localmente e installarle su dispositivi Andriod o iOS. Se desideri eseguire la tua app su un simulatore Android, digita il comando seguente:

tns run android

Per il dispositivo iOS, puoi seguire il comando seguente:

tns run ios

Questo inizializzerà l'app in un dispositivo Android / iOS. Ne discuteremo più in dettaglio nei prossimi capitoli.

LiveSync

NativeScript fornisce la sincronizzazione in tempo reale delle modifiche nell'applicazione all'applicazione di anteprima. Apriamo il progetto utilizzando uno dei tuoi editor preferiti (Visual Studio Code sarebbe la scelta ideale per una migliore visualizzazione). Aggiungiamo alcune modifiche al nostro codice e vediamo come verranno rilevate in LiveSync.

Ora apri il file app.css e avrà il contenuto di seguito -

@import "[email protected]/theme/css/core.css"; 
@import "[email protected]/theme/css/blue.css"; 
/* Place any CSS rules you want to apply on both iOS and Android here. 
This is where the vast majority of your CSS code goes. */

Qui, l'istruzione import indica lo schema dei colori della nostra app. Cambiamo la combinazione di colori blu inbrown combinazione di colori come specificato di seguito -

@import "[email protected]/theme/css/core.css"; 
@import "[email protected]/theme/css/brown.css"; 
/* Place any CSS rules you want to apply on both iOS and Android here. 
This is where the vast majority of your CSS code goes. */

L'applicazione nel nostro dispositivo si aggiorna e dovresti vedere una ActionBar di colore marrone come mostrato di seguito -

Produzione

Di seguito è riportata la home page di BlankNgApp - Tema marrone.