Начало работы с ASP.NET Core 3.0 (preview)

Для разработки на APS.NET Core 3 я буду использовать VisualStudio 2019. Но вы можете использовать также VisualStudio Code, которая полностью бесплатная и кроссплатформенная. Кстати, VS2019 тоже работает на линуксе. Запустим VS2019. Выберите создать новый проект (Create a new project)

Далее нас ждет также обновлённая панель. Где мы можем выбрать тип проекта. Выберите ASP.NET Core Web Application.

Обратите внимание что в пункте ASP.NET Core Web Application внизу перечислены операционные платформы, на которых можно запускать наше приложение. Windows, Linux, macOS. Таким образом мы понимаем, что запускаем кроссплатформенное приложение.

В следующем окте выберите версию ASP.NET Core 3.0

Если Вы не видите ASP.NET Core 3 в VisualStudio 2019, то скорее всего у вас отключены превью версии. Чтобы их включить перейдите в опции Tools -> Options -> Environment -> Preview Features и проставьте галочку в опции «Use preivews of the .NET Core SDK«

Опции в VisualStudio 2019

Какие шаблоны проектов содержит VisualStudio 2019

По умолчанию у нас несколько проектов. Тут можно создать пустой ASP.NET проект.

  • Empty — можно создать пустой ASP.NET проект
  • API — это ASP.NET проект, который использует чаще всего формат передачи данных JSON или XML. Это наиболее популярный сейчас тип проекта.
  • Worker Service — это новый тип проекта, который упрощает работу со службами Windows. Служба это — программа, которая работает в фоновом режиме. Новый тип призван облегчить создание служб как на Windows так и на Linux. В Linux подобных системах такие службы называются демотом (Cron Daemon)
  • Web Application — проект для разработки сайтов, который использует классическую модель, более похожую на win forms.
  • Web Application (Model-View-Controller) — проект который использует довольно старую модель MVC, но супер популярную сегодня.

Введение в ASP.NET Core 3.0 (preview)

ASP.NET Core 3 кроссплатформенный, высокопроизводительный и абсолютно беспалый фреймворк от Майкрософт (Microsoft). Да-да вы не ослышались беспалый и кроссплатформенный. Это означает что вы можете использовать его на Linux подобных серверах.

Кто выбирает ASP.NET Core 3?

Миллионы разработчиков, которые знакомы с ASP.NET 4.x (старые версии не кроссплатформенные.) и которые хотят использовать знакомый и мощный инструмент.

ASP.NET Core 3 дает нам следующие преимущества:

  • Спроектированный для UI (user interface) и веб API
  • Удобная система юнит тестов.
  • Использует движок Razor, который позволяет сделать html динамическим.
  • Кроссплатформенный. Т.е. вы можете запускать как на Windows так и на macOS, and Linux.
  • Опенсорсный т.е. с открытым исходным кодом.
  • Хорошо интегрирован с современными клиентскими фреймворками. (кстати в VS есть очень удобные шаблоны под Angular и React.)
  • Содержит удобные инструменты для хостинга в облаке. В одной из статей рассказываю как можно развернуть приложение в облаке правда ASP.NET Core 2, но 3-ий поддерживает всё тоже самое.
  • Встроенная система разрешения зависимостей или DI (dependency injection)
  • Облегченный (т.е. нет тех огромных зависимостей что были в старых ASP.NET 4.x). Хорошо оптимизирован, что выдает высокую скорость работы. Поддерживает принцип модульности для HTTP запросов через pipeline (пайплайн)
  • Ability to host on IISNginxApacheDocker, or self-host in your own process.
  • Самое крутое, что можно хостить не только на IIS (веб сервак чисто под винду) :). Но также на Nginx (читайте настройку под Nginx ASP.NET пока core 2), Apache, Docker и self-host (т.е. вообще без сторонних серверов, запустил на своем пк и пожалуйста, работай.)

В чем же разница ASP.NET Core 2.x, 3.x .NET Framework (старая версия) и .NET Standard?

ASP.NET Core 2.x может работать с ASP.NET Core или .NET Framework. Но имейте ввиду что если вы добавите библиотеку из .NET Framework в свой проект на Core, то она будет работать только на MS Windows. Чтобы убрать такую проблему Microsoft предлагают использовать промежуточный фреймворк .NET Standard. Не пугайтесь это не еще какой-то новый бла бла фреймворк от Майкрософта.  Для меня это просто шаблон в VisualStudio который я должен использовать при разработке библиотек. Используйте это как правило. А язык и всё остальное тут везде одинаковые. Другими словами, если у вас в проекте попадается библиотека на .NET Framework скорее всего из-за одной такой «овцы» приложение не будет работать кроссплатформенно. И Вам придется арендовать Windows Server, которые заметно дороже Linux подобных.

Теперь важное замечание! ASP.NET Core 3.0 и выше будте работать только с .NET Core 1.x, 2.x. Как я понял даже без .NET Standard. Как пишет Microsoft это связанно с тем что в 3-ей версии кроссплатформенность, производительность, поэтому если вы подтяните что-то их видновой реализации это может испортить все плюшки.

Что уберут или заменят в ASP.NET Core 3

  • Json.NET (Newtonsoft.Json) — Newtonsoft уберут и заменят на нативную (родную) реализацию, которая должна работать значительно быстрее предшественника. Работать она будет с использованием нового unsafe класса Span[T], ReadOnlySpan[T].
  • Entity Framework Core (Microsoft.EntityFrameworkCore.*)

Error Occurs When Deploying Firebase Function

Пытаясь задиплоить функции firebase получил довольно неясную ошибку, без адекватного лога, а просто сырое «Error Occurs When Deploying Firebase Function».

Error Occurs When Deploying Firebase Function

Решить удалось довольно просто. Надо поменять версию npm, в моем случае на 8-ую версию. Эта версия скорее всего должна соответствовать среде на сервер firebase («runtime»:»nodejs8″). Возможно, на момент прочтения статьи на сервере firebase будет выше версия.

Я помел версию на 8.10.0 через менеджер версий nodejs. (Node version manager).

nvm use 8.10.0

Как запустить dotnet core и angular universal на nginx ubuntu

Идея приложения, следующая : Сервер у нас на dotnet core. А клиент на angular 7 (2+) с использованием SSR (server site rendering) или universal angular

VPS

Нам нужен VPS сервер. Я использую яндекс.облако. Они пока что дают 2 месяца бесплатного использования. Для экспериментов думаю вполне достаточно.

Как добавить виртуальную машину в яндекс облаке.

Если у вас есть другой VPS пропустите этот блок.

  1. Если вы уже зарегистрировались и активировали пробную версию.
Активируйте пробную версию в яндекс облаке

2. Перейдем во вкладку compute cloud

3. Нажмите на «Создать ВМ»

4. Введем простую конфигурацию ВМ

5. Добавим SSH-ключ

Запустите cmd.exe или powershell.exe. И введите следующую команду.

ssh-keygen -t rsa -b 2048

Я запускал на windows 10 и у меня вылетало сообщение ‘ssh-keygen’ is not recognized. Я просто запустил эту команду в git-bash. Есил еще не установили его установите очень нужная и полезная штука.

В папке /c/Users/username/.ssh/id_rsa у вас появится файлы id_rsa и id_rsa.pub

Добавим содержимое файла id_rsa.pub в поле SSH-ключ

Подлючимся к VPS серверу и установим несколько компанентов.

На вашем VPS установим следующие компоненты.

  1. Install .NET Core Runtime on Linux Ubuntu 18.04 — x64
  2. Install supervisor

Install .NET Core Runtime on Linux Ubuntu 18.04 — x64

Чтобы наше .NET Core приложение запускалось на линуксе надо установить runtime среду. Которая и будет запускать нашу сборку.

Согласно официальной документации там же можно найти другие сборки под linux, windows, MacOS.

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb;
sudo dpkg -i packages-microsoft-prod.deb;
sudo add-apt-repository universe;
sudo apt-get install apt-transport-https;
sudo apt-get update;
sudo apt-get install --assume-yes aspnetcore-runtime-2.2;

Сделаем сборку на разработческой машине. Я делаю сборку в VisualStudio 2019. Но вы можете воспользоваться командой dotnet publish. Естественно, чтобы данная команда сработала не забудьте установить SDK. Вы можете сделать сборку и на сервере.

dotnet publish --configuration Release

Результатом сборки это файлы .dll. Найдите .dll файл стартового проекта (startup project). Например MyProject.dll.

Запустим сборку на сервере командой

dotnet MyProject.dll

Попробуйте обратиться по ip вашего сервера с указанием порта, например 52.155.122.144:5000, приложение должно запуститься.

Но есть проблема. Если закрыть консоль, то приложение отключится. Чтобы эту проблему решить надо запустить приложение в фоновом режиме, как службу. К счастью для этого можно использовать сторонней софт superviser, который ставиться невероятно просто.

sudo apt-get install supervisor

Добавим файл в директорию /etc/supervisor/conf.d/hellomvc.conf

Добавьте следующее содержимое

[program:myproject]
command=/usr/bin/dotnet /var/aspnetcore/myproject/MyProject.dll
directory=/var/aspnetcore/myproject/
autostart=true
autorestart=true
stderr_logfile=/var/log/myproject.err.log
stdout_logfile=/var/log/myproject.out.log
environment=ASPNETCORE__ENVIRONMENT=Production
user=www-data
stopsignal=INT

Перезапустим сервис supervisor

sudo service supervisor stop
sudo service supervisor start

Продолжение следует… 🙂

ПРОГРАММИРОВАНИЕ НА ANDOIRD STUDIO (ВЫПАДАЮЩИЙ СПИСОК SPINNER)

В этом уроке мы разберём создание выпадающего списка (Spinner) в Android Studio.

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

Создадим новое приложение в Android Studio, выбрав Start a new Android Studio project. Назовём проект SpinnerLesson (поле Application name). Домен компании назовём lessons.ru (поле Company domain). Выберем каталог расположения нашего проекта в поле Project location. И нажмём кнопку Next

В следующем окне можно выбрать настройки в соответствии и изображением и нажать Next. Выберем Empty Activity (пустой активити) и нажмём Next. Имя главного Activity, можно оставить так, как есть, то есть MainActivity и нажать Finish. После создания проекта в открывшемся окне есть один Activity, это MainActivity.  Теперь перейдём к представлению главного Activity, то есть к activity_main.xml. Activity_main.xml представляет собой xml файл и хранится в папке ресурсов res в подпапке layout.

Заменим всё содержимое activity_main.xml на следующее:

Где Spinner и есть тот самый выпадающий список.

Теперь перейдём к MainActivity и отредактируем его таким образом, чтобы его содержимое соответствовало следующему коду:

ЧЕТВЕРТАЯ ТЕХНИЧЕСКАЯ РЕВОЛЮЦИЯ

Вы чувствуете эту тихую пока еще просто жужжащую дрожь под землей? Что-то движется грандиозное и могучее. Это нечто сделает миллионы людей несчастными или счастливыми в зависимости от того как встретить чудовище. Этот монстр ничто иное как «четвертая техническая революция». В последнее время я много размышлял на эту тему когда начал читать про нейронные сети. Нет, сами нейронные сети не вызвали у меня удивления я до сих пор думаю, что технология не совсем перспективная, а перспективнее на мой взгляд deep machine learning из которой и вышли нейронные сети. Т.е. мы получили новый «хайп» в мире ИИ – нейронную сеть к этому хайпу подключаются миллионы специалистов и серьезных it игроков. Еще недавно изучения ИИ было занятием «закрытым» этим занимались институты и редкие специалисты. Если в мире IT о чем-то стали громко говорить значит это приносить результат. В 2006 году казалось просто невозможным определить нарисованное на картинке, если бы вы сказали, что через 10 лет это станет абсолютно реально, то скорее всего вам бы не поверили, звучит слишком романтично. А сегодня сервис https://www.captionbot.ai легко определяет изображения на картинке. Кстати авто ру для распознания моделей по изображению тоже использует нейросеть. В любом случае хайм связан с реальными результатами и возможностью заменить сотни тысяч специалистов на рынке.

Самое интересное, что это можно сделать уже сегодня. Например, заменить армию низкоквалифицированных чиновников системой электронного правительства можно уже сегодня. Как известно в России больше 1 миллиона чиновников. Просто невероятная цифра с учетом того, что чиновники как известно еще вредят обществу. О замене чиновников говорит также политолог, доцент кафедры государственного управления Института общественных наук РАНХиГС Екатерина Шульман. Екатерина высказала данную идею 21 апреля, на международной конференции Skolkovo Robotics (https://www.youtube.com/watch?v=NqrVYBVFR_Q).  Этот вариант замены звучит как-то даже благородно т.к. не секрет, что мы, люди, не любим чиновников. Однако, одновременно с «паразитами» пропадут такие профессии, как бухгалтеры о чем официально даже высказался минфин предупредив о скором исчезновении профессии. К опасному списку принадлежит профессия оператор колл-центра. А дальше, казалось бы, еще более невероятная профессия, которая реально уже под угрозой – водитель. Даже текущий ИИ может заменить водителя. Множество компаний уже вступили в эту гонку. Примеры искусственного управления автомобилей Тесла, на мой взгляд, самые интересные. На видео не самая хорошая погода, но система справилась.

А тут тесла помогает предотвратить аварии

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

https://www.youtube.com/watch?v=04—IOjQu8

Есть абстрагироваться от несчастья и сфокусироваться на положительный результат, то сам факт поражает.  Еще пройдет пару лет когда система будет полностью протестирована и где-то в 2019 году мы увидим первые автопилоты на фурах. Транспортные компании будут первые кто воспользуется системой автопилота ведь предприниматели очень практичные. Всё это удешевит перевозки еще на несколько пунктов т.к. водителю ненадо платить и работать он может 365/24/7.

Что же касается заводов. Интересны разработки DARPA отцы интернета, которые уже произвели когда-то информационную революцию.

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

Магазине где не нужны продавцы кассиры, терминалы самообслуживания.

В общем смысле, когда вы впервые сядете в такси с надежным автопилотом, то можно считать, что 4-ая революция пришла.

ИИ да не совсем

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

Так или иначе, но квантовые компьютеры тоже часть 4-ой революции.

В других областях тоже различные интересные открытия, например, в  биотехнологии, в качестве редактирования генома с CRISPR/Cas9 и многие другие открытия, но это немного другая история.

Итог

Большинство профессий умрет. Что же делать?

В нормальных, западных странах этот вопрос уже широко обсуждается. Может кто помнит нашумевшую новость о том, что власти Швейцарии намеривались платить всем 2250 евро в месяц за просто так. Для нас это звучит странно, очередное баловство зажравшейся буржуа. Но на самом деле ситуация более глубокая. Такая инициатива — это часть грядущей 4-ой революции. Что будут делать миллионы Швейцарских «бездельников», а вот получить деньги за просто так. Вообще всё это называется “citizen income” (http://citizensincome.org/). Идея простая мы построим роботов, которые заберут наши рабочие места, а мы будем заниматься высоким, более важными делами – наука, творчество, воспитание детей и т.п.

ПРОГРАММИРОВАНИЕ НА ANDROID STUDIO — FLOATING ACTION BUTTON (АНИМАЦИЯ ЛЕТАЮЩЕЙ КНОПКИ) Ч. 2

В этом уроке мы продолжим рассматривать возможности анимации летающей кнопки Floating Action Button.

Для этого используем проект созданный в предыдущем уроке, где мы делали эффект плавного скрытия и появления кнопки, и создадим для этой кнопки дополнительный эффект вращения. Если вы ещё не успели ознакомиться с предыдущим уроком, то рекомендую начать с него. Он находиться здесь. Давайте теперь перейдём к каталогу ресурсов проекта. Здесь зайдём в каталог anim, в котором хранятся файлы с настройкой анимации. И первым делом откроем файл, отвечающий за скрытие кнопки, т.е. fab_hide.xml. К двум существующим в нём элементам scale и alpha добавим элемент rotate. Именно этот элемент отвечает за вращение кнопки.  После добавления содержимое файла fab_hide.xml должно быть следующим:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:fillAfter="true"
     android:duration="1000"
     android:shareInterpolator="true">

    <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:toXScale="0.0"
        android:toYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%" />

    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />

    <rotate
        android:fromDegrees="0"
        android:toDegrees="-360"
        android:pivotX="50%"
        android:pivotY="50%"
        />
</set>

Атрибут элемента rotate fromDegrees отвечает за угол наклона кнопки Floating Action Button вправо, или влево на момент начало анимации. А атрибут toDegrees определяет угол, на который будет повёрнута кнопка за установленный период анимации. Значения углов определяется в градусах, т.е. 360 будет означать полный оборот кнопки за период анимации, продолжительность которой определяет duration=»1000″. Знак «-» (минус) означает, что вращение будет происходить против часовой стрелки. Если необходимо, чтобы кнопка за период анимации делала два полных оборота, то нужно указать 360 * 2, т.е. 720 градусов. Атрибуты pivotX и pivotY определяют координату центра по осям X и Y, относительно которой будет происходить вращение кнопки. Т.е. в данном случаи центром вращения кнопки будет геометрический центр самой кнопки.

Теперь перейдём к файлу, который отвечает за появление кнопки, т.е. к fab_show.xml. Туда также добавим элемент rotate, только значение атрибута toDegrees изменим с отрицательного на положительное. Его содержимое должно стать следующим:

ПРОГРАММИРОВАНИЕ НА ANDROID STUDIO — FLOATING ACTION BUTTON (АНИМАЦИЯ ЛЕТАЮЩЕЙ КНОПКИ) Ч. 1

Итак, в данном уроке я расскажу о том, как делать простейшую анимацию летающей кнопки Floating Action Button.

Первым делом создайте новое приложение в Android Studio с пустым активити (Empty Activity).

Для работы с Floating Action Button в Android Studio необходимо подключить библиотеку Design. Чтобы это сделать нужно перейти в Gradle Scripts -> build.gradle (Modul: app). В build.gradle (Modul: app) в раздел dependencies добавьте такую строчку:

Должно всё выглядеть примерно так:

После чего нужно синхронизировать проект, нажав на ссылку Sync Now в верхнем правом углу. Теперь можно приступать к созданию летающей кнопки. Первым делом перейдите к представлению MainActivity, т.е. к файлу activity_main.xml, который расположен в app -> res -> layuot, и отредактируйте его содержимое следующим образом:

Далее нам нужно будет создать каталог для хранения файлов с настройками анимации. Для этого перейдём к каталогу ресурсов проекта app -> res и, нажав на нём правой кнопкой мыши, в появившемся меню выберем New -> Android resource directory. В открывшемся окне зададим наименование нового каталога. Назовём его anim.  После создания каталога anim создадим в нём файл, отвечающий за скрытие кнопки Floating Action Button. Для этого нажмите правой кнопкой мыши на каталоге anim и в появившемся меню выберите New -> Animation resource file. Назовите его fab_hide.

Отредактируйте его содержимое следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:fillAfter="true"
     android:duration="1000"
     android:shareInterpolator="true">

    <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:toXScale="0.0"
        android:toYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%" />

    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

Теперь аналогичным образом нужно создать ещё один файл, который будет отвечать за появление кнопки Floating Action Button. Назовите этот файл fab_show и отредактируйте его содержимое так:

Теперь перейдите к MainActivity и отредактируйте его код следующим образом:

package ru.lessons.fabanimation;

import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
 private FloatingActionButton fabHideFab;
 private Button btnShowFab;
 private Animation animShowFab, animHideFab;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  //анимация
  animShowFab = AnimationUtils.loadAnimation(this, R.anim.fab_show);
  animHideFab = AnimationUtils.loadAnimation(this, R.anim.fab_hide);

  //летающая кнопка Floating Action Button
  fabHideFab = (FloatingActionButton) findViewById(R.id.fabHideFab);
  //вспомогательная кнопка
  btnShowFab = (Button) findViewById(R.id.btnShowFab);

  fabHideFab.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    //анимация скрытия Floating Action Button
    fabHideFab.startAnimation(animHideFab);
   }
  });

  btnShowFab.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    //анимация появления Floating Action Button
    fabHideFab.startAnimation(animShowFab);
   }
  });
 }
}

ПРОГРАММИРОВАНИЕ НА ANDROID STUDIO — CUSTOM SPINNER (НАСТРАИВАЕМЫЙ ВЫПАДАЮЩИЙ СПИСОК) Ч. 2.2

В нашем сегодняшнем уроке мы продолжим рассматривать возможности настраиваемого выпадающего списка (Custom Spinner) в Android Studio.

Давайте предположим, что нам необходимо сделать выпадающий список таким образом, чтобы в случаи, когда список развёрнут, то каждый пункт списка отображал бы полную информацию, а в случаи, когда какой-то пункт выбран, то отображалась бы краткая информация. Создайте новое приложение в Android Studio с пустым активити (Empty Activity), и начнём делать наш список. Список будет содержать автомобильные бренды, логотипы этих брендов и информацию о сайте производителя. Пусть в развёрнутом виде нам нужно отображать логотип, наименование бренда и ссылку на сайт, а когда пункт выбран, только логотип и наименование бренда. Создадим шаблон пункта выпадающего списка. Для этого перейдите к каталогу layout ресурсов проекта: 

Нажмите на этом каталоге правой кнопкой мыши и в появившемся меню выберите New -> Layout resource file: Назовите его spinner_item: Отредактируйте содержимое spinner_item.xml в соответствии со следующим текстом:

В той же папке layout, где был создан spinner_item.xml аналогичным образом создайте шаблон для выбранного пункта списка и назовите его selected_item.xml. Отредактируйте содержимое selected_item.xml в соответствии со следующим текстом:

Теперь перейдите к файлу activity_main.xml, который расположен в том же каталоге layout и добавьте туда элемент Spinner. Должно получиться следующее:

Отредактируйте его код в соответствии со следующим текстом:

Взять архив с логотипами можно здесь: LogoImg

Теперь перейдите к MainActivity и отредактируйте его в соответствии со следующим кодом:

Пример использования redux ngrx

В этом уроке я расскажу Вам как можно начать работу с redux в angular (2+).

Установите Angular CLI как написано в инструкции т.е. наберите в консоли

Npm install –g @angular/cli (если у вас нет Npm установите его https://nodejs.org/en/)

Добавим файл helloReducer.ts и поместим следующий код

В данном случае у нас одно состояние (helloState) на один редьсер как добавить больше состояний покажу позже. В данном случае всё что делает редьюсер это просто добавляет слова hello world. Давайте протестируем как это будет выглядеть на деле.

Еще немного настроек. Перейдите в файл app.module.ts – наш стартовый модуль где начинается наше angular 2+ приложение. Добавьте в imports модуль StoreModule из библиотеки @ngrx/store и наш с вам единственный на данный момент редьюсер helloReducer.

Файл app.module.ts

Еще рекомендую добавить модуль, для тестирования который позволит нам запустить мощный инструмент для отслеживания работы Redux devtools chrome extention

Для этого добавим еще

StoreDevtoolsModule.instrumentOnlyWithExtension()

В итоге весь наш модуль теперь выглядит так

Файл app.module.ts

Теперь мы спокойно можем вызвать наш Store в любом компоненте.

Добавим store через механизм внедрения зависимостей. Обратите внимание что мы не задумываемся как всё это работает модули ngrx уже настроены под всё необходимое за нас.

Поэтому добавим три метода в компонент

Файл app.component.ts

А также реализуем их в представление

Файла app.component.html

Теперь просто запустим наше прилежание. Наберите команду

Давайте сразу откроем расширение для мониторинга работы redux devtools (Redux devtools chrome extention) в google chrome.

how start redux devtools chrome extention

Переключитесь на вкладку “state”

switch to state in redux devtools chrome extention

И мы увидим наше сообщения по умолчанию «Сорри тут пусто :(»

Нажмите последовательно на кнопки addHello, addworld, removeHelloWorld мы увидим в DevTools как меняется состояние.

how start redux devtools chrome extention 2

Здорово значит всё работает!

Но как отобразить данные изменения в представление. Подписываемся на изменения состояния в angular redux ngrx. Всё что нужно сделать это подписаться на изменения к нашему хранилищу или store. В конструкторе класса AppComponent добавьте инструкцию.

store.subscribe(result => this.title = result.msg)

В итоге файл app.component.ts

Запустим приложение. Как совместить работу redux ngrx и запросы к базе мы посмотрим в след. Статье.

Исходники тут  (https://github.com/rusrc/redux_with_ngrx_super_simple)