Статьи

Представляем Vue и Weex для собственных мобильных приложений

Vue — это популярный JavaScript-фреймворк для веб-приложений с простой связью между данными в памяти и пользовательским интерфейсом. Теперь Weex позволяет нам кодировать нативные мобильные приложения, используя инфраструктуру Vue!

Почему мы используем Vue и другие среды привязки данных, такие как Angular и React? Что в них такого особенного? Мы используем их, чтобы гарантировать, что данные приложения, которые хранятся в памяти, синхронизируются с пользовательским интерфейсом и наоборот.

Мы также используем эти фреймворки, чтобы мы могли очень быстро создавать приложения и оптимизировать их производительность.

В этом руководстве я покажу вам, как использовать инфраструктуру Vue, в частности, как понять ее концепции привязки данных и шаблонов. Затем я представлю платформу Weex для кодирования собственных мобильных приложений с использованием Vue!

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

Двухстороннее связывание данных

Написание кода, поддерживающего эту привязку данных, было бы многословным. Нам нужно было бы создавать прослушиватели событий и прокси-объекты и наблюдаемые, чтобы фиксировать любые изменения в данных приложения. И эти сложности только растут и растут по мере добавления новых типов данных и входных данных. Vue и другие структуры привязки данных не позволяют нам писать весь этот код привязки.

С помощью Vue, если наш пользователь изменит некоторые входные данные, он будет синхронизирован с данными приложения следующим образом:

Изменения, вытекающие из пользовательского интерфейса в модель

Или, если приложение изменяет данные, оно обновит пользовательский интерфейс следующим образом:

Изменения, вытекающие из модели в пользовательский интерфейс

Когда мы синхронизируем пользовательский интерфейс и данные приложения, это означает, что наше приложение делает именно то, что мы ожидаем. Vue справится со всем этим и позволит другим мощным процессам связывания данных произойти.

Теперь, когда мы знаем, почему мы используем эти платформы, давайте настроим простое приложение Vue для запуска некоторых примеров. Создайте новый файл HTML в любом месте на вашем компьютере и вставьте в него следующий код:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
  <title>Tuts+ Vue</title>
  <script src=»https://unpkg.com/vue/dist/vue.min.js»></script>
</head>
<body>
 
  <div id=»app»>
     
  </div>
 
  <script>
    var app = new Vue({ el: ‘#app’ });
  </script>
 
</body>
</html>

Это простой файл HTML, который ссылается на библиотеку Vue JS. Он содержит элемент div с идентификатором app . Внутри тегов скрипта у нас есть переменная app которую мы используем, чтобы указать на наш взгляд — я объясню эту часть позже.

Затем мы создаем новый экземпляр Vue или «представление». Этот конструктор сообщает платформе, какой элемент будет содержать пользовательский интерфейс нашего приложения, и синхронизировать его с данными приложения.

Теперь дважды щелкните файл HTML, чтобы открыть его в браузере, и откройте окно консоли браузера.

Консоль браузера в Chrome

Текстовая интерполяция позволяет нам встраивать выражения в наш HTML-код, которые будут интерпретироваться при визуализации страницы. Выражения являются живыми, поэтому, если изменяются данные, от которых они зависят, страница будет обновляться в режиме реального времени. Это называется декларативным рендерингом, который позволяет нам размещать выражения в любом месте содержимого элемента. Давайте рассмотрим на простом примере.

1
2
3
4
5
6
7
8
9
<script>
    var app = new Vue({
        el: ‘#app’,
        data:
        {
            message: «Hello world»
        }
    });
</script>

Наш код JavaScript теперь содержит объект data который будет хранить все данные нашего приложения для этого представления. В нем я создал свойство message со строкой "Hello world" .

Далее, давайте отобразим это свойство в HTML.

1
2
3
4
5
6
7
<div id=»app»>
  <pre style=»font-family: ‘helvetica’; «>
      {{ message }}
       
      {{ message.split(»).reverse().join(») }}
    </pre>
</div>

Выражения обозначаются синтаксисом в двойных скобках. Vue JS управляет зависимостями каждого выражения и обновляет страницу в реальном времени, если они изменяются. В нашем случае у нас есть два выражения со свойством message как зависимость каждого из них. Первое выражение {{ message }} просто отображает свойство сообщения. Второе выражение {{ message.split('').reverse().join('') }} принимает свойство сообщения, а затем:

  • Разбивает строку на массив:
    [ "h","e","l","l","o"," ","w","o","r","l","d" ]
  • Изменяет порядок массива:
    [ "d","l","r","o","w"," ","o","l","l","e","h" ]
  • "dlrow olleh" массив, чтобы получить "dlrow olleh" , которое является тем же сообщением, но напечатано в обратном направлении.

Теперь откройте браузер и обновите страницу HTML. Затем откройте окно консоли браузера и присвойте app.message новое значение и посмотрите, как вывод обновляется в браузере.

Пример простого шаблона Vue

Вы также можете использовать математику в шаблонных выражениях или структурированные данные в объектах. На самом деле, как вы уже догадались, выражения Vue — это просто JavaScript. Доступ к глобальным переменным, однако, изолирован, поэтому вы можете получить доступ к Math , но не к window . Это помогает обеспечить безопасность ваших приложений и ваших пользователей.

Используя Vue с несколькими строками кода, мы можем улучшить двустороннее связывание данных. Это гарантирует, что пользовательский интерфейс и данные приложения синхронизируются относительно легко.

Директивы — это еще один способ связывания данных в наших представлениях. Мы можем использовать их для привязки данных приложения к атрибутам, событиям, полям ввода и повторяемым данным. Давайте рассмотрим каждую директиву и узнаем, как они работают.

  • v-bind : связать значение атрибута
  • v-model : привязка данных приложения к элементу ввода, например к textarea
  • v-on : определить обработчик события
  • v-for : привязка к массиву или объекту

Директива v-bind используется для привязки данных атрибута. Это позволяет нам привязать данные приложения к значению атрибута. Думайте об этом как о текстовой интерполяции, но внутри атрибута. Вы можете связать class , id , value или любой другой атрибут с помощью директивы v-bind .

В этом примере я хотел бы связать данные нашего приложения с атрибутом data-attr используя директиву v-bind:data-attr .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<script>
    var app = new Vue({
        el: ‘#app’,
        data:
        {
            number: 20,
            object:
            {
                type: «Full Name Object»,
                names: [«Lawrence»,»Anothy»,»Turton»]
            }
        }
    });
</script>
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<div id=»app»>
 
  <div v-bind:data-attr=» object.type «>
    {{ object.type }}
  </div>
 
  <div v-bind:data-attr=» object.names «>
    {{ object.names }}
  </div>
 
  <div v-bind:data-attr=» number * 20 / 2 «>
    {{ number * 20 / 2 }}
  </div>
 
  <div v-bind:data-attr=» [ object.type, object.names, number * 20 / 2 ] «>
    {{ [ object.type, object.names, number * 20 / 2 ] }}
  </div>
 
</div>

В приведенном выше примере мы связали атрибут data-attr с рядом различных источников данных. Сначала мы связываем его со свойствами type и names object . Затем мы связали его с математическим выражением, а затем соединили все привязки в один атрибут массива.

Посмотрите на вывод в браузере: вы можете нажать на вкладку Элементы, чтобы увидеть вывод значения каждого атрибута.

Значения атрибутов привязки

Опять же, вы можете изменить данные приложения в консоли, чтобы увидеть процесс привязки данных.

Изменения в модели отображаются автоматически

Думайте о директиве v-bind как разрешающей выражения в значениях атрибута. Это невероятно мощный инструмент, который легко установить с помощью библиотеки Vue.

Эта директива используется специально для синхронизации данных приложения с полями ввода, текстовыми областями и элементами выбора. Вот пример:

01
02
03
04
05
06
07
08
09
10
11
<script>
    var app = new Vue({
        el: ‘#app’,
        data:
        {
          message: «message string»,
          selected:»»,
          checkedNames: []
        }
    });
</script>
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<div id=»app»>
 
  <input type=»text» v-model=»message»>
 
  <textarea v-model=»message»></textarea>
 
  <hr>
 
  <select v-model=»selected»>
    <option disabled value=»»>Select a name</option>
    <option>Jack</option>
    <option>John</option>
    <option>Mike</option>
  </select>
  <span>Selected: {{ selected }}
 
  <hr>
 
  <input type=»checkbox» id=»jack» value=»Jack» v-model=»checkedNames»>
  <label for=»jack»>Jack</label>
  <input type=»checkbox» id=»john» value=»John» v-model=»checkedNames»>
  <label for=»john»>John</label>
  <input type=»checkbox» id=»mike» value=»Mike» v-model=»checkedNames»>
  <label for=»mike»>Mike</label>
 
  <select v-model=»checkedNames» multiple>
    <option>Jack</option>
    <option>John</option>
    <option>Mike</option>
  </select>
  <br>
  <span>Selected Names: {{ checkedNames }}
 
</div>

Для первого раздела этой страницы у нас есть поле ввода текста и область текста, обе из которых имеют директиву v-model которая синхронизирует эти поля ввода со свойством message , используя v-model="message" . Таким образом, если вы измените один из них, модель будет обновлена, а затем будет обновлено другое поле ввода. Идите и попробуйте!

Привязка к элементам ввода

В следующем разделе мы выпадаем из синхронизированного с selected свойством свойства v-model="selected" . Таким образом, если выбор будет изменен, наша модель будет обновлена.

Наконец, у нас есть множественный выбор. Я показал, как это сделать двумя способами: с несколькими флажками и с несколькими входами выбора. Поскольку у нас может быть несколько значений, я создал массив checkedNames который может хранить несколько значений. Каждый из входов множественного выбора и флажки имеют директиву v-model нацеленную на свойство checkNames . Попробуйте, и они должны оставаться синхронизированными, пока вы делаете выбор.

Связывание с множественным выбором

Эта директива позволяет нам прикреплять события к элементам HTML. Эта директива может использоваться для определенных элементов, к которым могут быть прикреплены события ввода, такие как зависание, щелчки, ввод текста, нажатия клавиш и т. Д. Для этого примера мы создадим простую кнопку с событием щелчка.

1
2
3
4
5
6
7
8
9
<script>
    var app = new Vue({
        el: ‘#app’,
        data:
        {
          clicked: «»
        }
    });
</script>
1
2
3
4
5
6
7
<div id=»app»>
 
  <button v-on:click=» [ alert(‘hello’), clicked = ‘hello’ ] «>Click me!</button>
 
  {{ clicked }}
 
</div>

В директиве v-on после двоеточия мы указываем событие, которое хотим присоединить. В этом примере, когда событие click запускается, мы запустим некоторые выражения. Сначала мы открываем диалоговое окно с предупреждением, а затем меняем значение свойства clicked . Обратите внимание, что вы можете вызывать функции в выражениях v-on .

Кнопка с событием щелчка

Эта директива является одной из самых мощных из них. Мы можем наблюдать за любым объектом или массивом на предмет изменений и повторно отображать часть кода нашего шаблона для каждого свойства или элемента, найденного в этом объекте или массиве. Например, чтобы отобразить массив имен в виде списка:

1
2
3
4
5
6
7
8
9
<script>
    var app = new Vue({
        el: ‘#app’,
        data:
        {
          names: [ «Lawrence», «John», «Mike», «Justin» ]
        }
    });
</script>
1
2
3
4
5
6
7
<div id=»app»>
 
  <ul>
    <li v-for=»name in names»>{{ name }}</li>
  </ul>
 
</div>

В этом примере мы сначала присоединяем директиву v-for к элементу, который вы хотите повторить. Значение директивы указывает объект или массив, который мы хотим перебрать ( names ), а также переменную, которая будет содержать значение для каждой итерации ( name ). Теперь внутри этого повторяющегося элемента мы можем использовать переменную name в выражениях.

Если затем мы изменим массив, например, с помощью метода, такого как push , sort или reverse , данные шаблона будут автоматически обновлены. Попробуйте запустить пример и измените массив в окне консоли.

Визуализация списка элементов с помощью директивы v-for

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

Давайте снова использовать директиву v-for для вывода элементов списка. Но на этот раз мы сделаем каждый элемент компонентом. Мы дадим этому компоненту имя, чтобы нацелить его в код нашего шаблона: list-item . Компоненты также могут иметь «зарегистрированные свойства», которым мы можем назначить значение, которое будет назначено при создании компонента. В моем случае компонент list-item будет ожидать получения значения для свойства name , определенного с помощью props:["name"] .

Давайте теперь создадим этот компонент. Пожалуйста, добавьте следующий код в теги скрипта:

1
2
3
4
Vue.component(‘list-item’, {
  template: ‘<li>{{ name }}</li>’,
  props: [ «name» ]
});

Также убедитесь, что у вас есть следующие данные приложения:

1
2
3
4
5
6
7
var app = new Vue({
    el: ‘#app’,
    data:
    {
        names: [ «Lawrence», «John», «Mike», «Justin» ]
    }
});
1
2
3
4
5
<div id=»app»>
  <ul>
    <list-item v-for=»name in names» v-bind:name=»name»></list-item>
  </ul>
</div>

Здесь вы можете видеть, что компонент list-item будет повторяться для каждого имени, найденного в массиве. Каждое имя будет присвоено переменной имени, определенной в директиве v-for . Мы передаем свойство name компоненту с помощью v-bind .

Каждый экземпляр — это просто копия компонента. Мы можем изменять каждую копию или экземпляр независимо друг от друга. Поэтому думайте о компонентах как о проекте, а экземпляры как о копиях, сделанных из проекта. Вот конечный результат:

Список отображается с компонентами

Мы работали с очень простым HTML-файлом и позволяли Vue интерпретировать все во время выполнения. Тем не менее, Vue поставляется с инструментом командной строки. Вы можете спросить себя, почему. Одна из причин заключается в том, что предварительно скомпилированные шаблоны страниц будут работать лучше, чем шаблоны, которые Vue интерпретирует во время выполнения. Другая причина заключается в том, что если бы мы создали крупномасштабное приложение и попытались разместить его в одном HTML-файле, оно быстро стало бы неуправляемым.

Поэтому нам нужна модульность, чтобы разбить большое приложение на более мелкие части.

Чтобы использовать командную строку, вам нужно открыть окно консоли для вашей операционной системы.

  • Для Mac нажмите Command-Space, а затем введите терминал и нажмите Return .
  • Для Windows найдите командную строку в меню автозагрузки, щелкните правой кнопкой мыши и выберите « открыть как администратор» .
  • Для Linux нажмите Control-Alt-T .

Прежде чем продолжить, убедитесь, что у вас установлена ​​последняя версия Node.js. Затем нам нужно установить Webpack, который сжимает размер файла нашего проекта, делая его быстрее в нашем браузере. Затем мы можем установить интерфейс командной строки Vue и запустить соответствующие команды для вашей платформы:

  • sudo npm install -g webpack
  • sudo npm install -g vue-cli
  • npm install -g webpack
  • npm install -g vue-cli

Это оно! Теперь мы готовы начать настройку нашего продвинутого проекта Webpack. Сначала перейдите в каталог, в котором мы хотим создать наш проект, в моем случае это рабочий стол, а затем создайте проект. Вы можете заменить myapp на любое имя проекта.

  • vue init webpack myapp

Вам будет предложено ответить на ряд вопросов о вашем проекте, предложив вам заполнить данные, такие как заголовок и описание, и спросить вас, устанавливать ли сторонние плагины. В этом примере вы можете ответить «нет» всем дополнительным возможностям. После того, как он создан, нам нужно установить зависимости, поэтому перейдите в каталог проекта, и мы запустим команду установки.

  • cd myapp
  • npm install

Пусть NPM установит все пакеты зависимостей, и тогда мы будем готовы продолжить.

После установки пакетов мы можем запустить сервер разработки, набрав npm run dev . Должно открыться окно вашего браузера, отображающее следующую страницу.

Экран приветствия стартового проекта Vue

Мы не будем разбираться со структурой всего проекта, но когда вы откроете каталог myapp, вы увидите каталог src . Он содержит файл App.vue, файл main.js и, в каталоге компонентов , файл Hello.vue .

Файлы Vue являются компонентами. Файл main.js настраивает начальное представление и, возможно, другие конфигурации. Давайте посмотрим на файлы App.vue и Hello.vue .

Файлы VUE из начального проекта Vue

Здесь вы можете видеть, что каждый компонент Vue разбит на три части:

  • <template> : HTML-разметка, которая составляет часть пользовательского интерфейса.
  • <script> : данные приложения, фильтры, методы, вычисляемые свойства, наблюдатели и методы.
  • <style> : стили CSS или Sass наших компонентов.

Компиляция всех компонентов вместе приведет к масштабному применению. Это означает, что при разработке мы работаем над небольшими модульными фрагментами кода, называемыми компонентами, а не над всем приложением. В Vue у нас есть однофайловые компоненты, которые содержат JavaScript, HTML и CSS. Он даже позаботится о переносе ES6 в ES5, Sass в CSS и Jade в HTML, если вы решите использовать эти языки.

Вы заметите в файле App.vue , я выделил, где он импортирует компонент Hello.vue . Компоненты могут быть вложены в другие компоненты!

При компиляции наш проект строится следующим образом:

Vue процесс сборки

Мы по-прежнему используем тот же синтаксис, что и в предыдущих примерах. Однако сейчас мы работаем с небольшими файлами Vue и собираем их вместе. У нас также есть более продвинутые функции, такие как препроцессоры и сжатие Jade, Sass, ES6 и Webpack.

Теперь, когда мы понимаем библиотеку Vue, давайте кратко рассмотрим, как мы можем взять наше веб-приложение и превратить его в собственное мобильное приложение, устанавливаемое на iOS или Android.

Weex — это гибридный фреймворк, то есть он позволяет использовать несколько технологий, так же как гибридный автомобиль может использовать как электрический, так и бензиновый. В нашем случае мы используем JavaScript-код из нашего веб-приложения, но мы отображаем его в нативном пользовательском интерфейсе. Кроме того, из JavaScript мы можем получить доступ к собственным API-интерфейсам устройства для доступа к оборудованию, такому как камера, датчики и файловая система.

Части приложения Weex

В Weex вместо рендеринга нашего приложения в HTML мы используем XML. На самом деле, HTML и XML очень похожи, поэтому синтаксис будет выглядеть знакомо. Этот XML будет затем преобразован в собственные компоненты. Теперь наш JavaScript сможет общаться с этими нативными компонентами так же, как он взаимодействует с DOM в Vue с помощью HTML. Мало того, но собственные компоненты могут быть стилизованы и позиционированы с помощью CSS, включая анимацию, переходы и многое другое, и они могут быть интегрированы в собственный слой.

Это всего лишь тизер того, что может сделать Weex. В следующих уроках я более подробно расскажу о Weex и узнаем, как создавать практичные кроссплатформенные нативные приложения.

Vue имеет простой синтаксис и очень быстро растет в популярности. Weex позволяет нам создавать мобильные приложения с использованием JavaScript и Vue, но при этом предоставляет собственные приложения.

Сам Vue стабилен, но Weex все еще находится на ранней стадии разработки — в настоящее время он находится в инкубаторе Apache. Но не волнуйтесь, Weex скоро будет готов к производству, и его поддержит технологический гигант Alibaba. Поэтому, если вас интересует предварительная версия для разработчиков, вы можете подождать, пока Weex достигнет полной версии.

Теперь вы видели, как привязка данных является ключевой причиной использования Vue и подобных сред. Они экономят нам время на разработку и предоставляют стандартный способ создания приложений. Вы также узнали, как использовать текстовую интерполяцию, директивы и события в Vue и как эти функции работают вместе, чтобы синхронизировать данные приложения с пользовательским интерфейсом.

Мы начали с базового проекта только с одной точки зрения. Но затем мы создали более продвинутый проект, который имел меньшие, более модульные представления, называемые компонентами. Компоненты позволяют разбить наш проект, чтобы его было проще кодировать и поддерживать. После этого мы увидели, как использовать компилятор Vue для обеспечения переноса ES6, Jade и Sass на стандартные языки, сжимая при этом размеры файлов до минимума.

Все эти знания помогут вам, когда вы начнете кодировать с Weex. Weex позволит нам взять наше веб-приложение Vue и превратить его в мобильное приложение. Weex немного отличается — мы используем XML со специальными компонентами вместо HTML — но мы все еще можем использовать другие веб-технологии, такие как CSS и JavaScript. Это означает, что нам не нужно менять логику приложения с веб-приложения на мобильное приложение.

Следите за моей следующей статьей о разработке Weex, а пока ознакомьтесь с некоторыми другими нашими статьями о разработке мобильных приложений с использованием веб-технологий.

  • Ионная 2
    Введение в Ionic 2
    Верн Анчета
  • ионный
    Как создать приложение для камеры с помощью Ionic 2
    Ашраф Хатхибелагал
  • React Native
    Практические примеры анимации в React Native
    Верн Анчета
  • React Native
    Начните с React Native Layouts
    Верн Анчета