Инструменты пользователя

Инструменты сайта


angular:angularjs:route:ngroute

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
angular:angularjs:route:ngroute [2021/01/21 10:34]
werwolf
angular:angularjs:route:ngroute [2023/01/12 12:18] (текущий)
Строка 5: Строка 5:
 Вот у меня подключен скрипт angular, скрипт angular-route и main.js нашего приложения. Первое,​ что мы делаем для того, чтобы у нас что-то работало это выводим тег ng-view. Вот у меня подключен скрипт angular, скрипт angular-route и main.js нашего приложения. Первое,​ что мы делаем для того, чтобы у нас что-то работало это выводим тег ng-view.
 \\ \\
 +
 <code javascript>​ <code javascript>​
 <​!DOCTYPE html> <​!DOCTYPE html>
Строка 30: Строка 31:
 </​html>​ </​html>​
 </​code>​ </​code>​
 +
 +Это тег, в который будет выводится содержимое каждого нашего роута. Дальше давайте зайдем в scipts.js и подключим в зависимости ngRoute.
 +
 +<code javascript>​
 +var app = angular.module('​MyApp',​ ['​ngRoute'​]);​
 +</​code>​
 +
 +Теперь сконфигурируем наш роут.
 +
 +<code javascript>​
 +app.config(function ($routeProvider) {
 +  $routeProvider
 +    .when('/',​ {
 +      template: '<​h1>​This is my home page</​h1>'​
 +    })
 +});
 +</​code>​
 +
 +Что мы здесь сделали?​ Мы конфигурируем наш ng-route. В конфиг мы инджектим $routeProvider,​ с которой мы можем с помощью метода when определить,​ что будет происходить,​ когда мы заходим на урл /. Когда мы заходим на слеш, то мы будем грузить шаблон "This is my home page"​.\\
 +\\
 +Если вы заметили,​ здесь я использую IntelliJ IDEA. Это самый простой вариант разрабатывать с помощью localhost, не поднимая специально бекенд для этого. Сейчас когда я нажимаю в index.html на пиктограмму Chrome, то у меня открывается не файл, а localhost с портом,​ в котором index.html является корневым файлом. Это очень удобно для таких вещей, как ui-router или angular-route,​ поскольку мы будем загружать шаблоны ajax запросами и у нас не будет работать код, если мы будем использовать обычные файлы.\\
 +\\
 +Давайте посмотрим. Если мы обновляем страницу,​ то мы видим, что наш url поменялся на #/ и мы видим наш шаблон. Что произошло?​\\
 +
 +  * Мы подключили angular-route
 +  * Определили ng-view в html
 +  * Сконфигурировали,​ что должно выводится,​ когда мы заходим на /
 +
 +Давайте добавим еще какой-нибудь путь.
 +
 +<code javascript>​
 +app.config(function ($routeProvider) {
 +  $routeProvider
 +    .when('/',​ {
 +      template: '<​h1>​This is my home page</​h1>'​
 +    })
 +    .when('/​posts',​ {
 +      template: '<​h1>​Posts for my site</​h1>'​
 +    })
 +});
 +</​code>​
 +При заходе на роут /posts, мы будем выводить надпись "Posts for my site". Если в браузере мы напишем /posts, то мы видим это сообщение.\\
 +\\
 +Теперь давайте добавим кнопки перехода между урлами.
 +<code javascript>​
 +<a href="#/">​Home</​a>​
 +<a href="#/​posts">​Posts</​a>​
 +</​code>​
 +
 +В браузере переход по ссылкам работает корректно,​ без перезагрузки страницы. Обратите внимание,​ что наш url идет с решеткой. Это выключеный html5 mode. Когда урлы идут через решетку,​ то бекенд в этом не задействован. По факту, бекенд нам всегда выдает файл index.html, а сам роутинг строится уже от этого файла. Если же вы хотите урлы без решетки,​ то вам нужно прописывать дополнительные настройки и настраивать ваш сервер таким образом,​ чтобы он редиректил всегда на тот файл, где у вас грузится angular и роутинг происходил всегда на стороне фронтенда.\\
 +\\
 +Теперь давайте попробуем поменять темплейты.
 +<code javascript>​
 +app.config(function ($routeProvider) {
 +  $routeProvider
 +    .when('/',​ {
 +      templateUrl:​ '​home.html'​
 +    })
 +});
 +</​code>​
 +
 +У меня в папке source лежит пустой файл home.html и мы хотим, чтобы он загружал не инлайн шаблон,​ а из файла. Давайте для этого напишем
 +
 +<code javascript>​
 +<​h1>​Homepage</​h1>​
 +</​code>​
 +
 +Теперь,​ когда мы переходим на главную,​ мы видим, что у нас выводится Homepage. Если мы посмотрим в network, то мы увидим,​ что у нас есть get запрос,​ который выгребает файл home.html и выводит его. Если бы у нас сейчас не было localhost, а был бы просто открытый файл в браузере,​ то у нас бы падало с ошибкой,​ что оно не может сделать запрос.
 +\\
 +Также, в роутере можно прописывать контроллер,​ который будет обрабатывать этот шаблон.
 +
 +<code javascript>​
 +app.config(function ($routeProvider) {
 +  $routeProvider
 +    .when('/',​ {
 +      templateUrl:​ '​home.html',​
 +      controller: '​homeCtrl'​
 +    })
 +});
 +</​code>​
 +
 +И опишем его ниже
 +
 +<code javacript>​
 +app.controller('​homeCtrl',​ function ($scope) {
 +  console.log('​HomeCtrl'​);​
 +})
 +</​code>​
 +
 +Теперь,​ когда мы заходим на homepage, мы видим в консоли HomeCtrl, а это значит,​ что каждый раз, когда перерисовывается шаблон,​ и когда мы переходим на homepage, у нас отрабатывает homeCtrl. Теперь мы можем в переменную $scope.model записать message.\\
 +<code javascript>​
 +$scope.model = {
 +  message: 'This is my beautifull homepage'​
 +}
 +</​code>​
 +
 +И теперь мы можем использовать ее в шаблоне.
 +
 +<code javascript>​
 +<​h1>​Homepage</​h1>​
 +{{model.message}}
 +</​code>​
 +
 +Мы видим, что мы легко можем использовать любые переменные из контроллера прямо в нужном нам роуте.
angular/angularjs/route/ngroute.1611214459.txt.gz · Последние изменения: 2023/01/12 12:15 (внешнее изменение)