Статьи

Создание мобильных приложений с Angular или Vue.js и NativeScript {N}

В последние годы все больше и больше разработчиков Java вступают в контакт с разработкой интерфейса. Для этой группы разработчиков переход на разработку мобильных приложений с помощью NativeScript — лишь маленький шаг. В этом посте мы попытаемся прояснить возможности разработки нативных и гибридных приложений с использованием NativeScript.

Что такое NativeScript {N}?

{N} — это платформа с открытым исходным кодом (под лицензией Apache 2) для создания собственных приложений iOS и Android с использованием TypeScript и Angular. {N} — это технология, отличная от гибридных сред, таких как Ionic и Phonegap. {N} — это среда выполнения, а не веб-технология. Ваше приложение не будет работать как мини-сайт в WebView и поэтому будет более эффективным. С {N} у вас есть прямой доступ ко всем родным API вашего устройства.

Машинопись

Для программистов на Java интересно понять, что TypeScript (TS) имеет много общего с Java. TS — лучший способ написать {N} приложения, независимо от того, объединены ли они с Angular или нет. И, кроме того, написание собственного кода в TS для Android довольно просто, потому что вы можете взять на себя много непосредственного участия в нативном коде Java (например:  new io.java.File() допустимо как в Java, так и в JS / TS. Это просто немного сложнее в Objective-C). На самом деле очень интересно видеть, как NativeScript удается реализовать все нативные конструкции с чистым JavaScript. От строковых массивов до интерфейсов и реализаций абстрактных классов.

Почему NativeScript?

Одним из аргументов в пользу использования NativeScript {N} является повторное использование «Умений». То есть кто-то со знанием JavaScript / TypeScript может сразу начать с {N}. {N} написано на JavaScript или TypeScript.

Повторное использование кода. Создание собственных мобильных приложений для iOS и Android с единой кодовой базой и общим интерфейсом. Это не относится к Xamarin, например, где вам нужно создать два интерфейса для iOS и Android с одним общим слоем. Неудивительно, что лозунг {N} звучит так: «Пиши один раз, беги везде».

Его также легко расширить с помощью модулей {N} (см. Примеры в этой статье) и модулей npm. Собственно плагины от Cordova / Phonegap.

Наконец, WebViews не используются, в отличие от многих гибридных сред. Благодаря JavaScript у вас есть прямой доступ к Native API и повышение производительности NativeScript.

Что нужно для NativeScript?

В документации по NativeScript есть четкое описание того, как {N} должен быть установлен. Поскольку эта установка не всегда работает безупречно, имеет смысл установить «NativeScript Sidekick».

С помощью Sidekick можно создавать приложения в облаке.

Если вы решили создавать свои приложения в облаке, вы можете разрабатывать свои приложения независимо от вашей операционной системы. Конечно, вы даже можете создавать приложения для iOS на компьютере с Windows. С Sidekick также можно работать локально, но для этого вам нужно настроить собственную среду с iOS Xcode и Android SDK. У Sidekick все еще есть много известных проблем, но он уже работает хорошо.

Еще одна приятная вещь о {N} — это Live Sync. Таким образом, если вы измените правило в коде, оно будет отправлено непосредственно на телефон с помощью облачной сборки, и результат изменения будет сразу же виден.

Как NativeScript работает с JavaScript?

Ниже приведен простой пример JavaScript в {N}, который создает экземпляр iOS-элемента UIAlertView управления на основе Objective-C  :

var myAlert = new UIAlertView();

myAlert.message = “NativeScript rocks!”;

myAlert.show();

Поскольку веб-разработчики не хотят изучать специфичные для iOS и Android API, {N} предлагает набор модулей {N}. Эти модули абстрагируют детали iOS и Android в простые API-интерфейсы JavaScript.

Приведенный выше  UIAlertViewкод можно переписать с помощью {N} ‘Dialog module’:

var dialogs = require ("ui / dialogs");

dialogs.alert ({message: "NativeScript rocks!"});

Этот  dialogs.alert() звонок также предоставляет нам  android.app.AlertDialog приложение для Android.

Хотя этот пример «диалога» прост, эту же технику можно использовать для создания надежных приложений. Для этого вы можете использовать уже существующие и зрелые нативные компоненты пользовательского интерфейса iOS и Android.

Что может Angular добавить в NativeScript?

{N} теперь также может быть написано на Angular.

Если у вас есть знания Angular, использовать Angular в {N} — небольшой шаг.

Большая разница с Angular заключается в том, что элементы HTML на основе браузера, такие как <div> и <span>, недоступны в {N}. Вместо этого вы должны использовать {N} компоненты пользовательского интерфейса.

DOM или браузер не используются в {N}. Пользовательские интерфейсы {N} являются собственными пользовательскими интерфейсами и поэтому отключены от DOM. Поскольку Angular является независимой средой и не связана с DOM, эту среду можно легко интегрировать с {N}. Пример ниже имеет дело с этим. AngularJS, в отличие от Angular, не подходит для {N}, потому что этот фреймворк связан с DOM.

Используя Angular в {N}, вы имеете возможность обмениваться кодом между вашим существующим веб-приложением и вашими собственными приложениями. Давайте посмотрим на пример.

Повторное использование кода между веб-приложениями и мобильными приложениями

В качестве примера, давайте покажем «Список покупок» в веб-приложении.

import {Component} from ‘@angular/core';

@Component({
    selector: ‘grocery - list '
    templateUrl: ‘grocerylist.template.html '
})
export class GroceryListComponent {
    groceries: string[];
    constructor() {
        this.groceries = [‘Cheese, ‘Eggs’, 'Tomatoes', 'Tea']
    }
}

Листинг 1

В листинге 1 определен угловой компонент, который заполняет массив «бакалейных товаров» через конструктор.

TypeScript используется. Это «типизированный надмножество» JavaScript и стандарт для написания приложений на Angular.

Как работает этот компонент?

С помощью селектора, связанного с Компонентом, вы можете попросить Angular создать экземпляр этого компонента и отобразить его, где он находит тег <grocery-list> в HTML (см. Листинг 2).

….

<grocery-list></grocery-list>     

….

Перечисление 2

Чтобы отобразить «Список покупок», шаблон должен быть определен с именем: grocerylist.template.html (см. Листинг 3). Этот шаблон также определен под  templateUrl Компонентом.

<p>Groceries: </p>
<ul>
	<li *ng-for = “let grocery of groceries">      
	{{grocery}}
	</li>
</ul>

Перечисление 3

Список «бакалеи» повторяется с использованием ng-for директивы Angular .

Теперь возникает вопрос: что еще нам нужно запрограммировать, чтобы приведенный выше код работал для ваших приложений NativeScript для iOS и Android?

Комплексный ответ:

Компонент в листинге 1 остается тем же. Поэтому этот код TypeScript можно повторно использовать между веб-приложением и мобильными приложениями.

Единственное, что вам нужно изменить — это шаблон для этого компонента!

Вы должны использовать {N} компоненты пользовательского интерфейса вместо элементов HTML в вашем шаблоне (см. Листинг 4 ). Что поразительно, так это то, что вы все еще можете использовать ng-for директиву Angular  для перебора списка.

А преобразование шаблона в {N} компоненты пользовательского интерфейса является простым упражнением, поскольку для каждого элемента HTML существует собственный компонент пользовательского интерфейса. Этот пример также показывает, что Angular отключен от DOM и поэтому может работать с {N} компонентами пользовательского интерфейса.

<StackLayout *ngFor = "let grocery of groceries">

<Label [text] = “grocery"></Label>

</StackLayout>

Листинг 4

Модуль HTTP

Другим примером повторного использования кода является следующий.

{N} обеспечивает поддержку веб-API, таких как  XMLHttpRequest и  fetch().

Вы можете использовать модуль HTTP в {N}. Этот модуль позволяет отправлять веб-запросы и получать веб-ответы.

var http = require(“http”); import HTTP module

http.getJSON(‘https://api.groceries.com’)

.then(function (result)) {
});

Листинг 5

На диаграмме ниже вы видите слева, что {N} переводит веб-API XMLHttpRequests в собственный код для iOS и Android. В правой части этой диаграммы также показана реализация XMLHttpRequest, который используется для веб-приложения. Это реализация, отличная от варианта NativeScript.

Проблема здесь в том, что мы не можем повторно использовать реализации XMLHttpRequest между веб-приложением и мобильным приложением. Здесь есть «недостающая ссылка», а именно универсальный модуль HTTP для веб-приложения и мобильного приложения.

Это можно решить с помощью Angular. Angular добавляет дополнительный уровень абстракции для обработки HTTP-запросов / ответов. Это возможно с модулем HTTP от Angular.

Мы можем повторно использовать этот модуль между веб-приложением и мобильным приложением.

Например, код для повторного использования будет выглядеть следующим образом в Angular:

import {Http} from ‘@angular/http’

export class GroceryListService {
    constructor(private http: Http) {}
    getGroceries() {
        return this.http.get(`https://api.groceries.com`)
            .map((res: Response) => res.json());
    }
}

Листинг 6

Дополнительные инструменты и функции

Помимо вышеупомянутых примеров, у нас также есть другие функции, такие как использование плагинов, строительных лесов и {N} Playground. Кроме того, теперь вы можете создать приложение {N} с каркасом Vue.js.

Плагины

Интересно, что {N} состоит в том, что на рынке доступно множество плагинов .

Вам не нужно все строить самостоятельно. Подумайте о Facebook, аутентификации по отпечатку пальца / лицу, «текст в речь», рекламе с Admob или покупках в приложении. Если плагин еще не доступен, он всегда может быть создан вами.

NativeScript Playground

{N} Playground — это инструмент, который позволяет легко создать приложение с помощью веб-интерфейса в течение нескольких минут. Смотрите https://play.nativescript.org .

В дополнение к веб-сайту на устройстве должны быть установлены два приложения:

  • NativeScript Playground
  • Предварительный просмотр NativeScript

После сканирования QR-кода веб-сайта https://play.nativescript.org с помощью приложения для игровой площадки приложение будет установлено на устройство. С Live Sync все изменения будут сразу видны в приложении. Вы также можете перетаскивать компоненты (кнопки, ползунки, диаграммы) в свой шаблон. Очень круто.

Попробуйте это. С Playground вы можете легко поделиться своим кодом {N} и проблемами с другими разработчиками. Это способ быстро начать работу с {N} и ощутить его преимущества. Вы также можете создать приложение с помощью NativeScript и Vue.js.

NativeScript и Vue.js

Как и Angular, Vue.js также основан на компонентах. Он фокусируется на виде слоя. Vue.js легко интегрируется с Angular или другими интерфейсными фреймворками. И, наконец, очень маленький и компактный (21 Кб).

Я покажу вам простой пример того, как компонент выглядит в Vue.js и NativeScript.

Сначала создается экземпляр Vue с помощью new Vue(). Этот экземпляр содержит данные или модель, которую вы хотите визуализировать. В этом случае мы хотим сделать сообщение: «Hello Vue!»

И второй шаг — определить шаблон для отображения сообщения.

const Vue = require("nativescript-vue");

new Vue({
    data() {
        return {
            message: 'Hello Vue!',
        }
    },
    template: `
<Page class="page">
<Label :text="message" />
</Page>
`,
}).$start();

Этот компонент отобразит на вашем мобильном устройстве следующее:

Привет Vue!

Элемент <Page> является верхним уровнем / основным элементом пользовательского интерфейса каждого приложения NativeScript + Vue.js. Все остальные элементы пользовательского интерфейса вложены в.

Весь код в одном файле!

Вы можете поэкспериментировать с Vue.js и NativeScript на игровой площадке NativeScript.

Создание веб-приложений и мобильных приложений из одного проекта

Повторное использование кода является очень важной задачей для разработки в целом.

На данный момент вы можете создать веб-приложение с помощью Angular CLI. И для {N} вы используете NativeScript CLI. До Angular 6.1 это было проблемой, потому что CLI не давали нам возможности создать один проект для веб-приложения и собственного мобильного приложения. Конечно, можно поддерживать два отдельных проекта и копировать и вставлять общие файлы между двумя проектами. Это также можно решить с помощью следующего «начального проекта». Например: https://github.com/TeamMaestro/angular-native-seed .

Но с @ angular / cli 6.1.0 теперь можно создавать как веб-приложения, так и мобильные приложения из одного проекта. Чтобы реализовать мечту о совместном использовании кода, команды Angular и NativeScript объединились для создания нативных схем . Это схематическая коллекция или хранилище для создания компонентов в приложениях NativeScript + Angular с использованием Angular CLI. Чтобы сгенерировать новый проект NativeScript + Angular, вы можете использовать ng newс @ nativescript / Programs, указанными в качестве коллекции схем.

Обратите внимание, что вам может понадобиться сначала установить @ nativescript / schematics :

npm install --global @nativescript/schematics 

Для запуска нового проекта обмена веб-кодами и мобильными телефонами:

ng new --collection=@nativescript/schematics my-shared-app --shared 

Заключение

Таким образом, {N} является мощной средой для создания собственных кроссплатформенных мобильных приложений с Angular, Vue.js, TypeScript или JavaScript. У вас есть прямой доступ к API нативной платформы.

С NativeScript Playground вы можете создать приложение за несколько минут. А с помощью NativeScript SideKick вы можете создавать надежные приложения в облаке.

{N} работает не так, как гибридные фреймворки, такие как Phonegap, но очень подходит для веб-разработчиков. Это более производительный и простой в освоении.