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

В этой главе мы познакомимся с маршрутизацией AngularJS.

Маршрутизация AngularJS позволяет нам получать доступ к разному содержимому через разные URL-адреса.

С помощью AngularJS можно реализовать одностраничные веб-приложения с несколькими представлениями (SPA).

Обычно наш URL имеет видhttp://example.com/first/page, но в одностраничных веб-приложениях AngularJS использует#! + маркердля реализации этого, например:

http://example.com/#!/first
http://example.com/#!/second
http://example.com/#!/third

Примечание: В версиях до Angular 1.6 маршрутизация реализуется через# + маркер.

Когда мы нажимаем на любую из ссылок выше, адрес, запрашиваемый с сервера, один и тот же (http://example.com/). Поскольку содержимое после знака #! игнорируется браузером при запросе к серверу. Поэтому нам нужно реализовать функциональность содержимого после знака #! на стороне клиента. Маршрутизация AngularJS использует#! + маркер, чтобы помочь нам различать разные логические страницы и привязывать разные страницы к соответствующим контроллерам.

На приведённой выше диаграмме мы видим, что созданы два URL-адреса: /ShowOrders и /AddNewOrder. Каждому URL-адресу соответствует своё представление и контроллер.

Теперь давайте рассмотрим простой пример:

Примеры AngularJS

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Пример маршрутизации AngularJS - Учебное руководство</title> <script src="https://cdn.bootcss.com/angular.js/1.7.0/angular.min.js"></script> <script src="https://cdn.bootcss.com/angular.js/1.7.0/angular-route.min.js"></script> </head> <body ng-app='routingDemoApp'> <h2>Приложение маршрутизации AngularJS</h2> <ul> <li><a href="#!/">Главная</a></li> <li><a href="#!/computers">Компьютеры</a></li> <li><a href="#!/printers">Принтеры</a></li> <li><a href="#!/blabla">Другие</a></li> </ul> <div ng-view></div> <script>angular.module('routingDemoApp',['ngRoute']) .config(['$routeProvider', function($routeProvider){ $routeProvider .when('/',{template:'Это главная страница'}) .when('/computers',{template:'Это страница категории компьютеров'}) .when('/printers',{template:'Это страница принтеров'}) .otherwise({redirectTo:'/'}); }]);</script> </body> </html>

Попробуйте »

Анализ примера:

  • 1. Загрузите JS-файл, реализующий маршрутизацию: angular-route.js.

  • 2. Включите модуль ngRoute в качестве зависимого модуля основного модуля приложения.

    angular.module('routingDemoApp',['ngRoute'])
    
  • 3. Используйте директиву ngView.

    <div ng-view></div>

    HTML-содержимое внутри этого div будет меняться в соответствии с изменениями маршрута.

  • 4. Настройте $routeProvider. AngularJS $routeProvider используется для определения правил маршрутизации.

    module.config(['$routeProvider', function($routeProvider){
        $routeProvider
            .when('/',{template:'这是首页页面'})
            .when('/computers',{template:'这是电脑分类页面'})
            .when('/printers',{template:'这是打印机页面'})
            .otherwise({redirectTo:'/'});
    }]);
    

Функция config модуля AngularJS используется для настройки правил маршрутизации. Используя API config, мы запрашиваем внедрение $routeProvider в нашу функцию конфигурации и используем API $routeProvider.when для определения наших правил маршрутизации.

$routeProvider предоставляет нам функции when(path,object) и otherwise(object) для определения всех маршрутов по порядку. Функция when содержит два параметра:

  • Первый параметр — это URL или правило регулярного выражения URL.
  • Второй параметр — это объект конфигурации маршрутизации.

Объект конфигурации маршрутизации

Маршрутизацию AngularJS также можно реализовать с помощью разных шаблонов.

Первый параметр функции $routeProvider.when — это URL или правило регулярного выражения URL, а второй параметр — объект конфигурации маршрутизации.

Правила синтаксиса объекта конфигурации маршрутизации следующие:

$routeProvider.when(url, {
    template: string,
    templateUrl: string,
    controller: string, function или  array,
    controllerAs: string,
    redirectTo: string, function,
    resolve: object<key, function>
});

Описание параметра:

  • template:

    Если нам нужно вставить только простой HTML-контент в ng-view, используйте этот параметр:

    .when('/computers',{template:'这是电脑分类页面'})
  • templateUrl:

    Если нам нужно вставить только файл HTML-шаблона в ng-view, используйте этот параметр:

    $routeProvider.when('/computers', {
        templateUrl: 'views/computers.html',
    });
    

    Приведённый выше код получит содержимое файла views/computers.html с сервера и вставит его в ng-view.

  • controller:

    Тип Function, string или array; функция контроллера, выполняемая в текущем шаблоне и создающая новую область видимости.

  • controllerAs:

    Тип String; задаёт псевдоним для контроллера.

  • redirectTo:

    Адрес перенаправления.

  • resolve:

    Задаёт другие модули, от которых зависит текущий контроллер.

Пример

Пример AngularJS

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Пример маршрутизации AngularJS - Учебное руководство</title> <script src="https://cdn.bootcss.com/angular.js/1.7.0/angular.min.js"></script> <script src="https://cdn.bootcss.com/angular.js/1.7.0/angular-route.min.js"></script> <script type="text/javascript"> angular.module('ngRouteExample', ['ngRoute']) .controller('HomeController', function ($scope, $route) { $scope.$route = $route;}) .controller('AboutController', function ($scope, $route) { $scope.$route = $route;}) .config(function ($routeProvider) { $routeProvider. when('/home', { templateUrl: 'embedded.home.html', controller: 'HomeController' }). when('/about', { templateUrl: 'embedded.about.html', controller: 'AboutController' }). otherwise({ redirectTo: '/home' }); }); </script> </head> <body ng-app="ngRouteExample" class="ng-scope"> <script type="text/ng-template" id="embedded.home.html"> <h1> Главная </h1> </script> <script type="text/ng-template" id="embedded.about.html"> <h1> О нас </h1> </script> <div> <div id="navigation"> <a href="#!/home">Главная</a> <a href="#!/about">О нас</a> </div> <div ng-view=""> </div> </div> </body> </html>

Попробуйте »
Другие расширения