Приклад маршрутизації AngularJS із параметрами

Перш ніж ми дізнаємося, як працює маршрутизація в Angular, давайте просто зробимо короткий огляд односторінкових програм.

Що таке односторінкові програми?

Односторінкові програми або (SPA) — це веб-програми, які завантажують одну сторінку HTML і динамічно оновлюють сторінку на основі взаємодії користувача з веб-програмою.

Що таке маршрутизація в AngularJS?

Маршрутизація в AngularJS це метод, який дозволяє створювати односторінкові програми. Це дозволяє створювати різні URL-адреси для різного вмісту у ваших веб-додатках. Маршрутизація AngularJS також допомагає показати кілька вмісту залежно від обраного маршруту. Він вказується в URL-адресі після знака #.

Розглянемо приклад сайту, розміщеного через URL-адресу http://example.com/index.html.

На цій сторінці ви розмістите головну сторінку своєї програми. Припустімо, якщо програма організовує подію, і хтось хоче побачити, які різні події відображаються, або хоче переглянути деталі певної події чи видалити подію. У односторінковій програмі, коли ввімкнено маршрутизацію, усі ці функції будуть доступні за наведеними нижче посиланнями

http://example.com/index.html#ShowEvent

http://example.com/index.html#DisplayEvent

http://example.com/index.html#DeleteEvent

Символ # використовуватиметься разом із різними маршрутами (ShowEvent, DisplayEvent і DeleteEvent).

  • Отже, якщо користувач хотів би побачити всі події, його було б спрямовано за посиланням (http://example.com/index.html#ShowEvent), інше
  • Якби вони хотіли просто переглянути певну подію, вони були б перенаправлені за посиланням ( http://example.com/index.html#DisplayEvent) Або
  • Якщо вони захочуть видалити подію, їх буде спрямовано за посиланням http://example.com/index.html#DeleteEvent.

Зауважте, що основна URL-адреса залишається незмінною.

Додавання маршруту AngularJS за допомогою $routeProvider

Отже, як ми обговорювали раніше, маршрути в AngularJS використовуються для направлення користувача до іншого перегляду вашої програми. І ця маршрутизація виконується на тій же HTML-сторінці, щоб користувач мав відчуття, що він не залишив сторінку.

Щоб реалізувати маршрутизацію, наступні основні кроки повинні бути реалізовані у вашій програмі в будь-якому конкретному порядку.

  1. Посилання на angular-route.js. Це JavaScript файл, розроблений Google, який має всі функції маршрутизації. Це потрібно розмістити у вашій програмі, щоб вона могла посилатися на всі основні модулі, необхідні для маршрутизації.
  2. Наступним важливим кроком є ​​додавання залежності до модуля ngRoute з вашої програми. Ця залежність необхідна, щоб у програмі можна було використовувати функцію маршрутизації. Якщо цю залежність не додати, то не можна буде використовувати маршрутизацію в додатку angular.JS.

Нижче наведено загальний синтаксис цього оператора. Це звичайне оголошення модуля з додаванням ключового слова ngRoute.

var module = angular.module("sampleApp", ['ngRoute']);
  1. Наступним кроком буде налаштування $routeProvider. Це потрібно для надання різних маршрутів у вашій програмі. Нижче наведено загальний синтаксис цього оператора, який не потребує пояснень. Він лише вказує, що коли вибрано відповідний шлях, використовуйте маршрут для відображення заданого перегляду користувачеві.
when(path, route)
  1. Посилання на ваш маршрут із вашої сторінки HTML. На своїй HTML-сторінці ви додасте довідкові посилання на різні доступні маршрути у вашій програмі.
<a href="#/route1">Route 1</a><br/>
  1. Нарешті було б включення директива ng-view, який зазвичай міститься в тезі div. Це буде використано для введення вмісту перегляду, коли вибрано відповідний маршрут.

Приклад маршрутизації AngularJS

Тепер давайте розглянемо приклад маршрутизації за допомогою згаданих вище кроків.

У нашому прикладі маршрутизації AngularJS із параметрами,

Ми надамо користувачеві 2 посилання,

  • Один із них – відображення тем для Кутовий JS звичайно, а інший для Node.js Звичайно.
  • Коли користувач натискає будь-яке посилання, відображаються теми цього курсу.

Крок 1) Включіть файл angular-route як посилання на сценарій.

Маршрутизація AngularJS

Цей файл маршруту необхідний для використання функціональних можливостей наявності кількох маршрутів і переглядів. Цей файл можна завантажити з веб-сайту angular.JS.

Крок 2) Додайте теги href, які представлятимуть посилання на «Теми Angular JS» і «Теми Node JS».

Маршрутизація AngularJS

Крок 3) Додайте тег div із директивою ng-view, яка представлятиме представлення.

Це дозволить вводити відповідне представлення щоразу, коли користувач натискає «Теми Angular JS» або «Теми Node JS».

Маршрутизація AngularJS

Крок 4) У свій тег сценарію для AngularJS додайте «ngRoute module» і службу «$routeProvider».

Маршрутизація AngularJS

Пояснення коду:

  1. Перший крок полягає в тому, щоб включити «модуль ngRoute». Завдяки цьому Angular автоматично оброблятиме маршрутизацію у вашій програмі. Модуль ngRoute, розроблений Google, має всі функції, які дозволяють зробити маршрутизацію. Додавши цей модуль, програма автоматично розумітиме всі команди маршрутизації.
  2. $routeprovider — це служба, яку angular використовує для фонового прослуховування викликаних маршрутів. Отже, коли користувач клацає посилання, постачальник маршрутів в AngularJS виявляє це, а потім вирішує, яким маршрутом слід скористатися.
  3. Створити один маршрут для посилання Angular – цей блок означає, що коли клацнути посилання Angular, вставити файл Angular.html і також використовувати контролер AngularController для обробки будь-якої бізнес-логіки.
  4. Створіть один маршрут для посилання Node – цей блок означає, що коли клацнути посилання Node, вставте файл Node.html і також використовуйте контролер NodeController для обробки будь-якої бізнес-логіки.

Крок 5) Далі слід додати контролери для обробки бізнес-логіки як для AngularController, так і для NodeController.

У кожному контролері ми створюємо масив пар ключ-значення, щоб зберігати назви тем і описи для кожного курсу. Змінна масиву 'tutorial' додається до об'єкта області для кожного контролера.

Маршрутизація AngularJS

<!DOCTYPE html>
<html>
<head>
    <meta chrset="UTF 8">
</head>
<body ng-app="sampleApp">
<title>Event Registration</title>
<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.js"></script>

<h1> Guru99 Global Event</h1>

<div class="container">
    <ul>
        <li><a href="#Angular">Angular JS Topics</a></li>
        <li><a href="#Node.html">Node JS Topics</a></li>
    </ul>
    <div ng-view></div>
</div>

<script>
    var sampleApp = angular.module('sampleApp',['ngRoute']);
    sampleApp.config(['$routeProvider',

        function($routeProvider){
        $routeProvider.
        when('/Angular',{
            templateUrl : '/Angular.html',
            controller: 'AngularController'
        }).
        when("/Node", {
            templateUrl: '/Node.html',
            controller: 'NodeController'
        });
    }]);
    sampleApp.controller('AngularController',function($scope) {

        $scope.tutorial = [
            {Name:"Controllers",Description :"Controllers in action"},
            {Name:"Models",Description :"Models and binding data"},
            {Name:"Directives",Description :"Flexibility of Directives"}
        ]
    });

    sampleApp.controller('NodeController',function($scope){

        $scope.tutorial = [
            {Name:"Promises",Description :"Power of Promises"},
            {Name:"Event",Description :"Event of Node.js"},
            {Name:"Modules",Description :"Modules in Node.js"}
            ]
    });

</script>
</body>
</html>

Крок 6) Створіть сторінки під назвою Angular.html і Node.html. Для кожної сторінки ми виконуємо наведені нижче дії.

Ці кроки забезпечать відображення всіх пар ключ-значення масиву на кожній сторінці.

  1. Використання директиви ng-repeat для проходження кожної пари ключ-значення, визначеної в навчальній змінній.
  2. Відображення назви та опису кожної пари ключ-значення.
  • Angular.html

Маршрутизація AngularJS

<h2>Anguler</h2>
<ul ng-repeat="ptutor in tutorial">
    <li>Course : {{ptutor.Name}} - {{ptutor.Description}}</li>
</ul>
  • Node.html

Маршрутизація AngularJS

<h2>Node</h2>
<ul ng-repeat="ptutor in tutorial">
    <li>Course : {{ptutor.Name}} - {{ptutor.Description}}</li>
</ul>

Якщо код виконано успішно, під час запуску коду в браузері буде показано наступний результат.

вихід:

Маршрутизація AngularJS

Якщо ви клацнете посилання AngularJS Topics, буде показано наведений нижче результат.

Маршрутизація AngularJS

Результат чітко показує, що

  • Коли натискається посилання «Теми Angular JS», routeProvider, який ми оголосили в нашому коді, вирішує, що потрібно вставити код Angular.html.
  • Цей код буде вставлено в тег div, який містить директиву ng-view. Крім того, вміст для опису курсу походить від «навчальної змінної», яка була частиною об’єкта області, визначеного в AngularController.
  • Коли один натискає на Node.js Теми, матиме місце той самий результат, і з’явиться представлення для тем Node.js.
  • Також зауважте, що URL-адреса сторінки залишається незмінною, змінюється лише маршрут після тегу #. І це концепція односторінкових додатків. Тег #hash в URL-адресі є роздільником, який розділяє маршрут (який у нашому випадку є «Angular», як показано на зображенні вище) і головну HTML-сторінку (Sample.html)

Маршрутизація AngularJS

Створення маршруту за замовчуванням в AngularJS

Маршрутизація в AngularJS також надає можливість мати маршрут за замовчуванням. Це маршрут, який вибирається, якщо немає відповідності існуючому маршруту.

Маршрут за замовчуванням створюється шляхом додавання наступної умови під час визначення служби $routeProvider.

Наведений нижче синтаксис просто означає переспрямування на іншу сторінку, якщо будь-який із існуючих маршрутів не збігається.

otherwise ({
    redirectTo: 'page'
});

Давайте використаємо той самий приклад вище та додамо маршрут за замовчуванням до нашої служби $routeProvider.

Створення маршруту за замовчуванням в AngularJS

function($routeProvider){
$routeProvider.

when('/Angular',{
templateUrl : 'Angular.html',
controller: 'AngularController'
}).

when("/Node", {
templateUrl: 'Node.html',
controller: 'NodeController'
}).
otherwise({
    redirectTo:'/Angular'
});
}]);

Пояснення коду:

  1. Тут ми використовуємо той самий код, що й вище, з тією лише різницею, що ми використовуємо оператор else і опцію «redirectTo», щоб вказати, яке представлення слід завантажити, якщо маршрут не вказано. У нашому випадку ми хочемо, щоб було показано перегляд '/Angular'.

Якщо код виконано успішно, під час запуску коду в браузері буде показано наступний результат.

вихід:

Створення маршруту за замовчуванням в AngularJS

З виходу,

  • Ви можете чітко бачити, що показане представлення за замовчуванням – це кутовий вигляд JS.
  • Це пояснюється тим, що коли сторінка завантажується, вона переходить до параметра «інакше» у функції $routeProvider і завантажує перегляд «/Angular».

Як отримати доступ до параметрів з маршруту AngularJS

Angular також надає функціональність для надання параметрів під час маршрутизації. Параметри додаються в кінці маршруту в URL-адресі, наприклад, http://guru99/index.html#/Angular/1. У цьому прикладі маршрутизації Angular,

  1. , http://guru99/index.html це URL-адреса основної програми
  2. Символ # є роздільником між основною URL-адресою програми та маршрутом.
  3. Angular - наш маршрут
  4. І, нарешті, «1» — це параметр, який додається до нашого маршруту

Синтаксис того, як виглядають параметри в URL-адресі, наведено нижче:

HTMLPage#/маршрут/параметр

Тут ви помітите, що параметр передається після маршруту в URL-адресі.

Тож у нашому прикладі маршрутів AngularJS, наведеному вище для тем Angular JS, ми можемо передати параметри, як показано нижче

Sample.html#/Angular/1

Sample.html#/Angular/2

Sample.html#/Angular/3

Тут параметри 1, 2 і 3 можуть фактично представляти topicid.

Давайте детально розглянемо, як ми можемо реалізувати Angular route з параметром:

Крок 1) Додайте наступний код до свого представлення

  1. Додайте таблицю, щоб показати користувачеві всі теми курсу Angular JS
  2. Додайте рядок таблиці для відображення теми «Контролери». Для цього рядка змініть тег href на «Angular/1», що означає, що коли користувач натискає цю тему, параметр 1 буде передано в URL-адресу разом із маршрутом.
  3. Додайте рядок таблиці для відображення теми «Моделі». Для цього рядка змініть тег href на «Angular/2», що означає, що коли користувач натискає цю тему, параметр 2 буде передано в URL-адресу разом із маршрутом.
  4. Додайте рядок таблиці для відображення теми «Директиви». Для цього рядка змініть тег href на «Angular/3», що означає, що коли користувач натискає цю тему, параметр 3 буде передано в URL-адресі разом із маршрутом.

Параметри доступу з маршруту AngularJS

Крок 2) Додайте ідентифікатор теми у функцію служби Routeprovider
У сервісній функції routeprovider додайте:topicId, щоб позначити, що будь-який параметр, переданий в URL-адресі після маршруту, має бути призначений змінній topicId.

Параметри доступу з маршруту AngularJS

Крок 3) Додайте необхідний код до контролера

  1. Обов’язково спочатку додайте “$routeParams” як параметр під час визначення функції контролера. Цей параметр матиме доступ до всіх параметрів маршруту, переданих в URL-адресі.
  2. Параметр “routeParams” містить посилання на об’єкт topicId, який передається як параметр маршруту. Тут ми приєднуємо змінну '$routeParams.topicId' до нашого об'єкта scope як змінну '$scope.tutotialid'. Це робиться для того, щоб на нього можна було посилатися в нашому поданні через змінну tutorialid.

Параметри доступу з маршруту AngularJS

<!DOCTYPE html>
<html>
<head>

    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body ng-app="sampleApp">

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="lib/bootstrap.js"></script>
<script src="lib/bootstrap.css"></script>

<h1> Guru99 Global Event</h1>
<table class="table table-striped">
    <thead>
    <tr> <th>#</th><th>Angular JS topic</th><th>Description</th><th></th> </tr> </thead>
    <tbody>
    <tr>
        <td>l</td><td>l</td><td>Controllers</td>
        <td><a href="#Angular/l">Topic details</a></td>
    </tr>
    <tr>
        <td>2</td><td>2</td><td>Models</td>
        <td><a href="#Angular/2">Topic details</a></td>
    </tr>
    <tr>
        <td>3</td><td>3</td><td>Directives</td>
        <td><a href="#Angular/3">Topic details</a></td>
    </tr>
    </tbody>
</table>

<script>
    var sampleApp = angular.module('sampleApp',['ngRoute']);

    sampleApp.config(
        function($routeProvider){
            $routeProvider.
            when('/Angular/:topicId',{
                templateUrl : 'Angular.html',
                controller: 'AngularController'
            })
        });

    sampleApp.controller('AngularController',function($scope,$routeParams) {

        $scope.tutorialid=$routeParams.topicId

    });
</script>
</body>
</html>

Крок 4) Додайте вираз до відображуваної змінної
Додайте вираз для відображення змінної tutorialid на сторінці Angular.html.

Параметри доступу з маршруту AngularJS

<h2>Anguler</h2>

<br><br>{{tutorialid}}

Якщо код виконано успішно, під час запуску коду в браузері буде показано наступний результат.

вихід:

Параметри доступу з маршруту AngularJS

На вихідному екрані

  • Якщо клацнути посилання Відомості про першу тему, до URL-адреси додається номер 1.
  • Потім це число буде взято як аргумент «routeparam» службою постачальника маршрутів Angular.JS, і потім до нього зможе отримати доступ наш контролер.

Як використовувати службу Angular $route

Служба $route дозволяє отримати доступ до властивостей маршруту. Послуга $route доступна як параметр, коли функція визначена в контролері. Загальний синтаксис того, як параметр $route доступний з контролера, показано нижче;

myApp.controller('MyController',function($scope,$route)
  1. myApp — це модуль angular.JS, визначений для ваших програм
  2. MyController — це назва контролера, визначеного для вашої програми
  3. Так само, як змінна $scope доступна для вашої програми, яка використовується для передачі інформації від контролера до представлення. Параметр $route використовується для доступу до властивостей маршруту.

Давайте подивимося, як ми можемо використовувати службу $route.

У цьому прикладі

  • Ми збираємося створити просту користувальницьку змінну під назвою «mytext», яка міститиме рядок «This is angular».
  • Ми збираємося приєднати цю змінну до нашого маршруту. Пізніше ми отримаємо доступ до цього рядка з нашого контролера за допомогою служби $route, а потім використаємо об’єкт scope, щоб відобразити це в нашому поданні.

Отже, давайте подивимося, які кроки нам потрібно виконати, щоб досягти цього.

Крок 1) Додайте спеціальну пару ключ-значення до маршруту. Тут ми додаємо ключ під назвою «mytext» і призначаємо йому значення «This is angular».

Послуга Angular $route

Крок 2) Додайте відповідний код до контролера

  1. Додайте параметр $route до функції контролера. Параметр $route є ключовим параметром, визначеним в angular, який дозволяє отримати доступ до властивостей маршруту.
  2. Доступ до змінної «mytext», визначеної в маршруті, можна отримати через посилання $route.current. Потім це призначається змінній 'text' об'єкта scope. Відповідно до текстової змінної можна отримати доступ із подання.

Послуга Angular $route

<!DOCTYPE html>
<html>
<head>

    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body ng-app="sampleApp">

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="lib/bootstrap.js"></script>
<script src="lib/bootstrap.css"></script>

<h1> Guru99 Global Event</h1>
<table class="table table-striped">
    <thead>
    <tr> <th>#</th><th>Angular JS topic</th><th>Description</th><th></th> </tr> </thead>
    <tbody>
    <tr>
        <td>l</td><td>l</td><td>Controllers</td>
        <td><a href="#Angular/l">Topic details</a></td>
    </tr>
    <tr>
        <td>2</td><td>2</td><td>Models</td>
        <td><a href="#Angular/2">Topic details</a></td>
    </tr>
    <tr>
        <td>3</td><td>3</td><td>Directives</td>
        <td><a href="#Angular/3">Topic details</a></td>
    </tr>
    </tbody>
</table>

<script>
    var sampleApp = angular.module('sampleApp',['ngRoute']);

    sampleApp.config(['$routeProvider',
        function($routeProvider){
            $routeProvider.
            when('/Angular/:topicId',{
                mytext:"This is angular",
                templateUrl : 'Angular.html',
                controller: 'AngularController'
            })
        }]);

    sampleApp.controller('AngularController',function($scope,$routeParams,$route) {

        $scope.tutorialid=$routeParams.topicId;
        $scope.text=$route.current.mytext;

    });
</script>
</body>
</html>

Крок 3) Додайте посилання на текстову змінну з об’єкта області як вираз. Це буде додано до нашої сторінки Angular.html, як показано нижче.

Це призведе до того, що текст «This is angular» буде введено у вид. Вираз {{tutorialid}} такий самий, як і в попередній темі, і тут буде показано число «1».

Послуга Angular $route

<h2>Anguler</h2>

<br><br>{{text}}

<br><br>

Якщо код виконано успішно, під час запуску коду в браузері буде показано наступний результат.

вихід:

Послуга Angular $route

З виходу,

  • Ми бачимо, що текст «This is angular» також відображається, коли ми натискаємо будь-яке з посилань у таблиці. Ідентифікатор теми також відображається одночасно з текстом.

Увімкнення маршрутизації HTML5

Маршрутизація HTML5 використовується в основному для створення чистих URL-адрес. Це означає видалення хештегу з URL-адреси. Таким чином, URL-адреси маршрутизації, коли використовується маршрутизація HTML5, відображатимуться, як показано нижче

Зразок.html/Angular/1

Зразок.html/Angular/2

Зразок.html/Angular/3

Ця концепція зазвичай відома як представлення красивої URL-адреси користувачеві.

Є 2 основні кроки, які необхідно виконати для маршрутизації HTML5.

  1. Налаштування $locationProvider
  2. Встановлення нашої бази для відносних посилань

Давайте детально розглянемо, як виконати вищезазначені кроки в нашому прикладі вище

Крок 1) Додайте відповідний код до кутового модуля

  1. Додайте константу базової URL-адреси до програми – це потрібно для маршрутизації HTML5, щоб програма знала, яке базове розташування програми.
  2. Додайте служби $locationProvider. Цей сервіс дозволяє визначити html5Mode.
  3. Установіть для html5Mode служби $locationProvider значення true.

Увімкнення маршрутизації HTML5

Крок 2) Видаліть усі теги # для посилань («Angular/1», «Angular/2», «Angular/3»), щоб створити URL-адресу, яку легко читати.

Увімкнення маршрутизації HTML5

<!DOCTYPE html>
<html>
<head>

    <meta chrset="UTF 8">
    <title>Event Registration</title>
</head>
<body ng-app="sampleApp">

<script src="https://code.angularjs.org/1.6.9/angular-route.js"></script>
<script src="https://code.angularjs.org/1.6.9/angular.min.js"></script>
<script src="lib/bootstrap.js"></script>
<script src="lib/bootstrap.css"></script>

<h1> Guru99 Global Event</h1>
<table class="table table-striped">
    <thead>
    <tr> <th>#</th><th>Angular JS topic</th><th>Description</th><th></th> </tr> </thead>
    <tbody>
    <tr>
        <td>l</td><td>l</td><td>Controllers</td>
        <td><a href="Angular/l">Topic details</a></td>
    </tr>
    <tr>
        <td>2</td><td>2</td><td>Models</td>
        <td><a href="Angular/2">Topic details</a></td>
    </tr>
    <tr>
        <td>3</td><td>3</td><td>Directives</td>
        <td><a href="Angular/3">Topic details</a></td>
    </tr>
    </tbody>
</table>

<script>
    var sampleApp = angular.module('sampleApp',['ngRoute']);
    sampleApp.constant("baseUrl","http://localhost:63342/untitled/Sample.html/Angular");

    sampleApp.config(
        function($routeProvider,$locationProvider){
            $routeProvider.
            when('/Angular/:topicId',{
                templateUrl : 'Angular.html',
                controller: 'AngularController'
            })
        });

    sampleApp.controller('AngularController',function($scope,$routeParams,$route) {

        $scope.tutorialid=$routeParams.topicId

    });
</script>
</body>
</html>

Якщо код виконано успішно, під час запуску коду в браузері буде показано наступний результат.

вихід:

Увімкнення маршрутизації HTML5

З виходу,

  • Ви можете побачити, що тег # відсутній під час доступу до програми.

Підсумки

  • Маршрутизація використовується для представлення різних переглядів користувачеві на одній веб-сторінці. В основному це концепція, яка використовується в односторінкових програмах, які реалізовані майже для всіх сучасних веб-програм
  • Маршрут за замовчуванням можна налаштувати для маршрутизації angular.JS. Він використовується для визначення того, який вигляд буде показано користувачеві за замовчуванням
  • Параметри можна передати маршруту через URL як параметри маршруту. Потім доступ до цих параметрів здійснюється за допомогою параметра $routeParams у контролері
  • Службу $route можна використовувати для визначення користувальницьких пар ключ-значення в маршруті, до яких потім можна отримати доступ із перегляду
  • Маршрутизація HTML5 використовується для видалення #тегу з URL-адреси маршрутизації в angular для формування красивої URL-адреси