Fuzja Jako programista, który pracuje z najnowszymi trendami to oczywiste, że chcesz użyć Angular w swoich projektach ASP.NET.  Angular w przeciwieństwie do bibliotek jak jQuery wymaga wielu kroków. Czasy ściągania plików JS ze stron internetowych dawno minęły.

Te same kroki powinny działać nie tylko do aplikacji ASP.NET Core 2. Jest możliwe dołączenie Angulara do każdej aplikacji ASP.NET nawet do Web Forms. Ja jednak się skupię tylko na najnowszej odsłonie ASP.NET.

Przygotowanie

Na początku sprawdź czy masz zainstalowanego Node.js. Bez Node.js nie będziesz mógł korzystać z menadżera paczek jakim jest NPM. Możesz pobrać Node.js z tej strony : https://nodejs.org/en/download/

Po instalacji w konsoli poleceń sprawdź czy Node istnieje wraz z menadżerem paczek jak NPM.

> node -v
> npm -v

Oto przykład użycia:

node -v

Następnie musimy zainstalować interfejs poleceń do Angulara zwanym inaczej Angular CLI.  Angular CLI oferuje zestaw poleceń które pomogą nam w łatwy sposób stworzyć aplikację Angular wewnątrz aplikacji ASP.NET.

Do instalacji użyj następującego polecenia.

npm install -g @angular/cli

Aby sprawdzić czy wszystko poszło ok wpisz

ng -v

ng -v

Jak widać chłopaki od Angulara poświecili trochę czasu by wyświetlić efektowny napis.

Już prawie wszystko. Typescript powinien być zainstalowany razem z Visual Studio, ale dla pewności zainstaluj go następującą komendą.

npm install -g typescript

Analogicznie możesz potem sprawdzić czy TypeScript istnieje.

tsc -v

tsc -v

Wszystko jest gotowe. To teraz jak scalić aplikację ASP.NET Core 2 z Angularem 5.

1: Stworzenie aplikacji ASP.NET Core 2

Na potrzeby wpisu potrzebuję prostej aplikacji ASP.NET.

New Project Visual Studio 2017

Wiem, że istnieje gotowy szablon Angular w przewodniku tworzenia aplikacji ASP.NET Core, ale nie o to tutaj chodzi. Szablon szablonem, ale osobiście sam postanowiłem stworzyć ten wpis by pamiętać ile rzeczy ukrytych leży pod tym szablonem.

Dla tego wpisu wybieram więc szablon Model-View-Controller.

Web Application

Wszystkie przykładowe strony z szablonu korzystają z głównego layout w folderze Shared.

Index.cshtml _Layout.cshtml

Po dodaniu aplikacji Angular stworzę inny layout, który będzie dla aplikacji Angular. Udowodnię w ten sposób, że można mieć hybrydę.

Czyli parę stron będzie korzystało z mechanizmu MVC, a inna strona będzie  aplikacją pojedynczej strony Angular.

Jak zobaczysz później zmodyfikuje stronę Index.cshtml by była aplikacją Angular.

2 : Stworzenie aplikacji Angular

Następnie trzeba utworzyć aplikację Angular.

Trzeba to zrobić przy pomocy linii komend. Znajdź folder główny swojej aplikacji i uruchom na niej polecenie

ng new AngularFolder

ng new AngularFolder

Instalacja może trochę potrwać ponieważ Angular CLI musi pobrać sporą liczbę paczek.

via npm completed

Wykaż się więc cierpliwością, a zostaniesz nagrodzony. Mamy więc folder aplikacji Angular w naszej aplikacji ASP.NET.

via npm completed

Co trzeba zrobić dalej.

3 : Edycja plików .angular-cli

Obecnie mamy dwie aplikację, które nie są w żaden sposób ze sobą powiązane. Angular zawiera dużo plików Typescript, CSS, HTML  i innych paczek. Nie wszystkie one będą potrzebne po stronie klienta. Angular CLI więc twój kod Typescrpt skompiluje do paru plików JavaScript. Kod HTML i CSS zostanie też odpowiednio zmiażdżony.

Musimy powiedzieć Angularowi by te skompilowane pliki umieścił w folderze wwwroot gdzie siedzi nasza aplikacja ASP.NET Core.

.angular-cli.json

W pliku .angular-cli.json zamień właściwość “outDir” na…

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "project": {
    "name": "angular-folder"
  },
  "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets",
        "favicon.ico"
      ],

…na coś innego.

      "outDir": "../wwwroot/dist",

Analogicznie możesz postąpić z plikiem tsconfig.json, który wyrzuca czasami potrzebne informację o procesie kompilacji TypeScript na JavaScript.

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "../wwwroot/dist/out-tsc",

Plik znajduje się w tym miejscu.

tsconfig.json

Teraz by sprawdzić czy wszystko zostało uzupełnione poprawnie musisz znowu wejść do linii poleceń. Wejdź do folder AngularFolder i tam uruchom polecenie

ng build

ng build

Skompilowany kod Angulara umieści się w folderze wwwroot. Normalnie byłby w folderze AngularFolder.

Folder dist Angular

Jesteśmy bardzo blisko.

4 : Przygotowanie ASP.NET Core

Tak jak obiecałem teraz stworzę inny szablon główny dla stron z aplikacją Angular. W folderze Shared wywołuję więc następujące menu kontekstowe.

ASP.NET CORE Shared View

Swój Layout nazwałem _AngularLayout i zaznaczyłem opcję “Create as partial View”.

Angular Layout

W nim dodaję odpowiednie odniesienia do plików Angular w folderze skompilowanym “dist”

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <base href="/dist/" />
</head>
<body>
    @RenderBody()
    <script type="text/javascript" src="inline.bundle.js"></script>
    <script type="text/javascript" src="polyfills.bundle.js"></script>
    <script type="text/javascript" src="styles.bundle.js"></script>
    <script type="text/javascript" src="vendor.bundle.js"></script>
    <script type="text/javascript" src="main.bundle.js"></script>
</body>
</html>

Zauważ parę rzeczy:

  • Tag base określa bazową ścieżkę dla wszystkich innych plików.
  • Tagi Script kierują się do wszystkich plików  JS skompilowanych przez Angulara.

Stronę index.cshtml modyfikuję w następujący sposób. Usuwam z niej tradycyjny kod i umieszczam w nim informację o innym głównym szablonie.

@{
    ViewData["Title"] = "Home Page";
    Layout = "~/Views/Shared/_AngularLayout.cshtml";
}
<app-root></app-root>

Tag app-root jest dyrektywą Angularową. Nie jest to już standardowy kod HTML. Zostanie on odpowiednio przetworzony przez kod JavaScript.

5 : Efekt końcowy

Uruchamiając aplikację przed twoimi oczami powinna ukazać się aplikacja SPA Angular.

Angular App

Gdy jednak wpiszesz inny adres i przykładowo będziesz chciał zobaczyć klasyczne strony MVC, to też nic nie stoi na przeszkodzie abyś to mógł zrobić.

ASP.NET MVC CORE

W teorii przy użyciu tej techniki można mieć kilka aplikacji pojedynczej strony Angular wewnątrz innej aplikacji ASP.NET Core.

Jak widzisz scalenie dwóch światów nie było aż takie straszne i obyło się bez gotowego szablonu. W następnym wpisie pokażę jak zrobić coś podobnego, ale korzystając nie z Visual Studio 2017, a z edytora Visual Studio Code.