AngularJS - Краткое руководство
Что такое AngularJS?
AngularJS - это фреймворк для веб-приложений с открытым исходным кодом. Первоначально он был разработан в 2009 году Миско Хевери и Адамом Абронсом. Сейчас он поддерживается Google. Его последняя версия - 1.4.3.
Определение AngularJS в его официальной документации выглядит следующим образом:
AngularJS - это структурная платформа для динамических веб-приложений. Он позволяет использовать HTML в качестве языка шаблонов и позволяет расширять синтаксис HTML для четкого и лаконичного представления компонентов вашего приложения. Связывание данных и внедрение зависимостей в Angular устраняют большую часть кода, который вам в настоящее время приходится писать. И все это происходит в браузере, что делает его идеальным партнером для любой серверной технологии.
Особенности
AngularJS - это мощная среда разработки на основе JavaScript для создания RICH Internet Application (RIA).
AngularJS предоставляет разработчикам возможность писать приложения на стороне клиента (с использованием JavaScript) в чистом виде MVC (Model View Controller).
Приложение, написанное на AngularJS, кроссбраузерно. AngularJS автоматически обрабатывает код JavaScript, подходящий для каждого браузера.
AngularJS - это открытый исходный код, полностью бесплатный и используется тысячами разработчиков по всему миру. Он находится под лицензией Apache License версии 2.0.
В целом, AngularJS - это фреймворк для создания крупномасштабных и высокопроизводительных веб-приложений, при этом их легко поддерживать.
Основные особенности
Ниже приведены наиболее важные основные функции AngularJS:
Data-binding - Это автоматическая синхронизация данных между компонентами модели и представления.
Scope- Это объекты, относящиеся к модели. Они действуют как клей между контроллером и представлением.
Controller - Это функции JavaScript, привязанные к определенной области.
Services- AngularJS поставляется с несколькими встроенными службами, например $ https: для создания XMLHttpRequests. Это одноэлементные объекты, экземпляры которых создаются в приложении только один раз.
Filters - Они выбирают подмножество элементов из массива и возвращают новый массив.
Directives- Директивы - это маркеры элементов DOM (таких как элементы, атрибуты, CSS и т. Д.). Их можно использовать для создания настраиваемых тегов HTML, которые служат в качестве новых настраиваемых виджетов. AngularJS имеет встроенные директивы (ngBind, ngModel ...)
Templates- Это визуализированный вид с информацией от контроллера и модели. Это может быть один файл (например, index.html) или несколько представлений на одной странице с использованием «частичных».
Routing - Это концепция переключения взглядов.
Model View Whatever- MVC - это шаблон проектирования для разделения приложения на разные части (называемые моделью, представлением и контроллером), каждая из которых имеет свои обязанности. AngularJS не реализует MVC в традиционном смысле, а скорее что-то ближе к MVVM (Model-View-ViewModel). Команда Angular JS с юмором называет это Model View Whatever.
Deep Linking- Глубокая ссылка позволяет закодировать состояние приложения в URL-адресе, чтобы его можно было добавить в закладки. Затем приложение может быть восстановлено из URL-адреса в то же состояние.
Dependency Injection - AngularJS имеет встроенную подсистему внедрения зависимостей, которая помогает разработчику, упрощая разработку, понимание и тестирование приложения.
Концепции
На следующей диаграмме показаны некоторые важные части AngularJS, которые мы подробно обсудим в следующих главах.
Преимущества AngularJS
AngularJS предоставляет возможность создавать одностраничные приложения очень чистым и удобным способом.
AngularJS обеспечивает возможность привязки данных к HTML, что дает пользователю богатый и отзывчивый опыт.
Код AngularJS можно тестировать.
AngularJS использует внедрение зависимостей и использует разделение проблем.
AngularJS предоставляет компоненты многократного использования.
С AngularJS разработчик пишет меньше кода и получает больше функциональности.
В AngularJS представления представляют собой чистые html-страницы, а контроллеры, написанные на JavaScript, выполняют бизнес-обработку.
Помимо всего прочего, приложения AngularJS могут работать во всех основных браузерах и смартфонах, включая телефоны / планшеты на базе Android и iOS.
Недостатки AngularJS
Хотя AngularJS имеет много плюсов, но в то же время мы должны учитывать следующие моменты:
Not Secure- Будучи фреймворком только для JavaScript, приложения, написанные на AngularJS, небезопасны. Аутентификация и авторизация на стороне сервера необходимы для обеспечения безопасности приложения.
Not degradable - Если пользователь вашего приложения отключит JavaScript, он увидит только базовую страницу и ничего более.
Компоненты AngularJS
Фреймворк AngularJS можно разделить на следующие три основные части:
ng-app - Эта директива определяет и связывает приложение AngularJS с HTML.
ng-model - Эта директива связывает значения данных приложения AngularJS с элементами управления вводом HTML.
ng-bind - Эта директива связывает данные приложения AngularJS с тегами HTML.
В этой главе мы обсудим, как настроить библиотеку AngularJS для использования при разработке веб-приложений. Мы также кратко изучим структуру каталогов и их содержимое.
Когда вы открываете ссылку https://angularjs.org/, вы увидите, что есть два варианта загрузки библиотеки AngularJS -
View on GitHub - Нажмите эту кнопку, чтобы перейти на GitHub и получить все последние скрипты.
Download AngularJS 1 - Или нажмите на эту кнопку, появится экран, показанный ниже -
На этом экране представлены различные варианты использования Angular JS следующим образом:
Downloading and hosting files locally
Есть два разных варианта legacy и latest. Сами имена говорят сами за себя.legacy имеет версию ниже 1.2.x и latest имеет версию 1.5.x.
Мы также можем использовать уменьшенную, несжатую или заархивированную версию.
CDN access- У вас также есть доступ к CDN. CDN предоставит вам доступ по всему миру к региональным центрам обработки данных, которые в данном случае размещены в Google. Это означает, что использование CDN переносит ответственность за размещение файлов с ваших собственных серверов на ряд внешних. Это также дает преимущество в том, что если посетитель вашей веб-страницы уже загрузил копию AngularJS с того же CDN, ее не нужно будет повторно загружать.
Try the new angularJS 2 - Нажмите на эту кнопку, чтобы загрузить версию Angular JS beta 2. Эта версия очень быстрая, мобильная и гибкая по сравнению с предыдущей и последней версией AngularJS 1.
В этом руководстве мы используем версии библиотеки CDN.
пример
Теперь напишем простой пример с использованием библиотеки AngularJS. Давайте создадим HTML-файл myfirstexample.html, как показано ниже -
<!doctype html>
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.5.2/angular.min.js"></script>
</head>
<body ng-app = "myapp">
<div ng-controller = "HelloController" >
<h2>Welcome {{helloTo.title}} to the world of Tutorialspoint!</h2>
</div>
<script>
angular.module("myapp", [])
.controller("HelloController", function($scope) {
$scope.helloTo = {};
$scope.helloTo.title = "AngularJS";
});
</script>
</body>
</html>
В следующих разделах подробно описывается приведенный выше код -
Включить AngularJS
Мы включили файл JavaScript AngularJS на страницу HTML, чтобы мы могли использовать AngularJS -
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
</head>
Если вы хотите обновить Angular JS до последней версии, используйте следующий источник скрипта или проверьте последнюю версию AngularJS на их официальном сайте.
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.5.2/angular.min.js"></script>
</head>
Укажите на приложение AngularJS
Далее мы сообщаем, какая часть HTML содержит приложение AngularJS. Это делается путем добавления атрибута ng-app к корневому элементу HTML приложения AngularJS. Вы можете добавить его в элемент html или в основной элемент, как показано ниже -
<body ng-app = "myapp">
</body>
Посмотреть
Вид - вот эта часть -
<div ng-controller = "HelloController" >
<h2>Welcome {{helloTo.title}} to the world of Tutorialspoint!</h2>
</div>
ng-controller сообщает AngularJS, какой контроллер использовать с этим представлением. helloTo.title сообщает AngularJS записать "модельное" значение с именем helloTo.title в HTML в этом месте.
Контроллер
Часть контроллера -
<script>
angular.module("myapp", [])
.controller("HelloController", function($scope) {
$scope.helloTo = {};
$scope.helloTo.title = "AngularJS";
});
</script>
Этот код регистрирует функцию контроллера с именем HelloController в угловом модуле myapp . Мы узнаем больше о модулях и контроллерах в соответствующих главах. Функция контроллера регистрируется в angular через вызов функции angular.module (...). Controller (...).
Параметр $ scope, переданный в функцию контроллера, является моделью . Функция контроллера добавляет объект JavaScript helloTo и в этот объект добавляет поле заголовка .
Исполнение
Сохраните приведенный выше код как myfirstexample.html и откройте его в любом браузере. Вы увидите результат, как показано ниже -
Welcome AngularJS to the world of Tutorialspoint!
Когда страница загружается в браузере, происходят следующие вещи:
HTML-документ загружается в браузер и оценивается браузером. Загружается файл JavaScript AngularJS, создается глобальный объект angular . Затем выполняется JavaScript, который регистрирует функции контроллера.
Затем AngularJS просматривает HTML в поисках приложений и представлений AngularJS. Как только представление найдено, оно подключает это представление к соответствующей функции контроллера.
Затем AngularJS выполняет функции контроллера. Затем он отображает представления с данными из модели, заполненной контроллером. Страница готова.
Mодель Vсмотреть Controller или MVC, как его обычно называют, представляет собой шаблон проектирования программного обеспечения для разработки веб-приложений. Шаблон контроллера представления модели состоит из следующих трех частей:
Model - Это самый низкий уровень шаблона, отвечающий за поддержание данных.
View - Он отвечает за отображение всех или части данных для пользователя.
Controller - Это программный код, который контролирует взаимодействие между моделью и представлением.
MVC популярен, потому что он изолирует логику приложения от уровня пользовательского интерфейса и поддерживает разделение задач. Контроллер получает все запросы для приложения, а затем работает с моделью для подготовки любых данных, необходимых для представления. Затем представление использует данные, подготовленные контроллером, для генерации окончательного презентабельного ответа. Абстракция MVC может быть представлена графически следующим образом.
Модель
Модель отвечает за управление данными приложения. Он отвечает на запрос от представления и на инструкции от контроллера по обновлению.
Вид
Представление данных в определенном формате, вызванное решением контроллера предоставить данные. Это системы шаблонов на основе сценариев, такие как JSP, ASP, PHP, и их очень легко интегрировать с технологией AJAX.
Контроллер
Контроллер реагирует на ввод данных пользователем и выполняет взаимодействия с объектами модели данных. Контроллер получает ввод, проверяет его, а затем выполняет бизнес-операции, которые изменяют состояние модели данных.
AngularJS - это фреймворк на основе MVC. В следующих главах мы увидим, как AngularJS использует методологию MVC.
Прежде чем мы начнем с создания реального приложения HelloWorld с использованием AngularJS, давайте посмотрим, каковы фактические части приложения AngularJS. Приложение AngularJS состоит из следующих трех важных частей:
ng-app - Эта директива определяет и связывает приложение AngularJS с HTML.
ng-model - Эта директива связывает значения данных приложения AngularJS с элементами управления вводом HTML.
ng-bind - Эта директива связывает данные приложения AngularJS с тегами HTML.
Шаги по созданию приложения AngularJS
Шаг 1. Загрузите платформу
Поскольку он является фреймворком на чистом JavaScript, его можно добавить с помощью тега <Script>.
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
Шаг 2. Определите приложение AngularJS с помощью директивы ng-app
<div ng-app = "">
...
</div>
Шаг 3. Определите имя модели с помощью директивы ng-model
<p>Enter your Name: <input type = "text" ng-model = "name"></p>
Шаг 4: Свяжите значение указанной выше модели, определенное с помощью директивы ng-bind.
<p>Hello <span ng-bind = "name"></span>!</p>
Шаги по запуску приложения AngularJS
Используйте вышеупомянутые три шага на странице HTML.
testAngularJS.htm
<html>
<head>
<title>AngularJS First Application</title>
</head>
<body>
<h1>Sample Application</h1>
<div ng-app = "">
<p>Enter your Name: <input type = "text" ng-model = "name"></p>
<p>Hello <span ng-bind = "name"></span>!</p>
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
</body>
</html>
Вывод
Откройте textAngularJS.htm в веб-браузере. Введите свое имя и посмотрите результат.
Как AngularJS интегрируется с HTML
Директива ng-app указывает на запуск приложения AngularJS.
Затем директива ng-model создает переменную модели с именем «name», которую можно использовать со страницей html и внутри div, имеющего директиву ng-app.
Затем ng-bind использует модель имени, которая будет отображаться в теге html span всякий раз, когда пользователь вводит что-то в текстовое поле.
Закрывающий тег </div> указывает на конец приложения AngularJS.
Директивы AngularJS используются для расширения HTML. Это специальные атрибуты, начинающиеся с префикса ng-. Мы собираемся обсудить следующие директивы -
ng-app - Эта директива запускает приложение AngularJS.
ng-init - Эта директива инициализирует данные приложения.
ng-model - Эта директива связывает значения данных приложения AngularJS с элементами управления вводом HTML.
ng-repeat - Эта директива повторяет элементы html для каждого элемента в коллекции.
директива ng-app
Директива ng-app запускает приложение AngularJS. Он определяет корневой элемент. Он автоматически инициализирует или загружает приложение при загрузке веб-страницы, содержащей приложение AngularJS. Он также используется для загрузки различных модулей AngularJS в приложение AngularJS. В следующем примере мы определили приложение AngularJS по умолчанию, используя атрибут ng-app элемента div.
<div ng-app = "">
...
</div>
директива ng-init
Директива ng-init инициализирует данные приложения AngularJS. Он используется для присвоения значений переменным, которые будут использоваться в приложении. В следующем примере мы инициализируем массив стран. Мы используем синтаксис JSON для определения массива стран.
<div ng-app = "" ng-init = "countries = [{locale:'en-US',name:'United States'},
{locale:'en-GB',name:'United Kingdom'}, {locale:'en-FR',name:'France'}]">
...
</div>
директива ng-model
Эта директива связывает значения данных приложения AngularJS с элементами управления вводом HTML. В следующем примере мы определили модель с именем «name».
<div ng-app = "">
...
<p>Enter your Name: <input type = "text" ng-model = "name"></p>
</div>
директива ng-repeat
Директива ng-repeat повторяет элементы html для каждого элемента в коллекции. В следующем примере мы перебираем массив стран.
<div ng-app = "">
...
<p>List of Countries with locale:</p>
<ol>
<li ng-repeat = "country in countries">
{{ 'Country: ' + country.name + ', Locale: ' + country.locale }}
</li>
</ol>
</div>
пример
В следующем примере будут продемонстрированы все вышеупомянутые директивы.
testAngularJS.htm
<html>
<head>
<title>AngularJS Directives</title>
</head>
<body>
<h1>Sample Application</h1>
<div ng-app = "" ng-init = "countries = [{locale:'en-US',name:'United States'},
{locale:'en-GB',name:'United Kingdom'}, {locale:'en-FR',name:'France'}]">
<p>Enter your Name: <input type = "text" ng-model = "name"></p>
<p>Hello <span ng-bind = "name"></span>!</p>
<p>List of Countries with locale:</p>
<ol>
<li ng-repeat = "country in countries">
{{ 'Country: ' + country.name + ', Locale: ' + country.locale }}
</li>
</ol>
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
</body>
</html>
Вывод
Откройте textAngularJS.htm в веб-браузере. Введите свое имя и посмотрите результат.
Выражения используются для привязки данных приложения к html. Выражения записываются в двойные фигурные скобки, например {{выражение}}. Выражения ведут себя так же, как директивы ng-bind. Выражения приложения AngularJS являются чистыми выражениями javascript и выводят данные, в которых они используются.
Использование чисел
<p>Expense on Books : {{cost * quantity}} Rs</p>
Использование строк
<p>Hello {{student.firstname + " " + student.lastname}}!</p>
Использование объекта
<p>Roll No: {{student.rollno}}</p>
Использование массива
<p>Marks(Math): {{marks[3]}}</p>
пример
В следующем примере будут продемонстрированы все вышеупомянутые выражения.
testAngularJS.htm
<html>
<head>
<title>AngularJS Expressions</title>
</head>
<body>
<h1>Sample Application</h1>
<div ng-app = "" ng-init = "quantity = 1;cost = 30;
student = {firstname:'Mahesh',lastname:'Parashar',rollno:101};
marks = [80,90,75,73,60]">
<p>Hello {{student.firstname + " " + student.lastname}}!</p>
<p>Expense on Books : {{cost * quantity}} Rs</p>
<p>Roll No: {{student.rollno}}</p>
<p>Marks(Math): {{marks[3]}}</p>
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
</body>
</html>
Вывод
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
Приложение AngularJS в основном полагается на контроллеры для управления потоком данных в приложении. Контроллер определяется с помощью директивы ng-controller. Контроллер - это объект JavaScript, содержащий атрибуты / свойства и функции. Каждый контроллер принимает $ scope в качестве параметра, который относится к приложению / модулю, которым контроллер должен управлять.
<div ng-app = "" ng-controller = "studentController">
...
</div>
Здесь мы объявили контроллер studentControllerс помощью директивы ng-controller. В качестве следующего шага мы определим studentController следующим образом:
<script>
function studentController($scope) {
$scope.student = {
firstName: "Mahesh",
lastName: "Parashar",
fullName: function() {
var studentObject;
studentObject = $scope.student;
return studentObject.firstName + " " + studentObject.lastName;
}
};
}
</script>
studentController определен как объект JavaScript с аргументом $ scope.
$ scope относится к приложению, которое должно использовать объект studentController.
$ scope.student - это свойство объекта studentController.
firstName и lastName - два свойства объекта $ scope.student. Мы передали им значения по умолчанию.
fullName - это функция объекта $ scope.student, задача которой - вернуть комбинированное имя.
В функции fullName мы получаем объект ученика, а затем возвращаем объединенное имя.
В качестве примечания, мы также можем определить объект контроллера в отдельном файле JS и сослаться на этот файл на странице html.
Теперь мы можем использовать свойство studentController с помощью ng-модели или следующих выражений.
Enter first name: <input type = "text" ng-model = "student.firstName"><br>
Enter last name: <input type = "text" ng-model = "student.lastName"><br>
<br>
You are entering: {{student.fullName()}}
Мы связали student.firstName и student.lastname двумя полями ввода.
Мы ограничили student.fullName () HTML.
Теперь всякий раз, когда вы вводите что-либо в поля ввода имени и фамилии, вы можете видеть, что полное имя обновляется автоматически.
пример
В следующем примере будет продемонстрировано использование контроллера.
testAngularJS.htm
<html>
<head>
<title>Angular JS Controller</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "studentController">
Enter first name: <input type = "text" ng-model = "student.firstName"><br>
<br>
Enter last name: <input type = "text" ng-model = "student.lastName"><br>
<br>
You are entering: {{student.fullName()}}
</div>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('studentController', function($scope) {
$scope.student = {
firstName: "Mahesh",
lastName: "Parashar",
fullName: function() {
var studentObject;
studentObject = $scope.student;
return studentObject.firstName + " " + studentObject.lastName;
}
};
});
</script>
</body>
</html>
Вывод
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
Фильтры используются для изменения данных и могут быть объединены в выражения или директивы с помощью вертикальной черты. Ниже приводится список часто используемых фильтров.
Sr. No. | Имя и описание |
---|---|
1 | uppercase преобразует текст в верхний регистр. |
2 | lowercase преобразует текст в нижний регистр. |
3 | currency форматирует текст в денежном формате. |
4 | filter фильтровать массив до его подмножества на основе предоставленных критериев. |
5 | orderby упорядочивает массив на основе предоставленных критериев. |
фильтр верхнего регистра
Добавьте фильтр верхнего регистра к выражению с помощью вертикальной черты. Здесь мы добавили фильтр в верхнем регистре, чтобы напечатать имя студента заглавными буквами.
Enter first name:<input type = "text" ng-model = "student.firstName">
Enter last name: <input type = "text" ng-model = "student.lastName">
Name in Upper Case: {{student.fullName() | uppercase}}
строчный фильтр
Добавьте фильтр нижнего регистра к выражению с помощью вертикальной черты. Здесь мы добавили фильтр нижнего регистра, чтобы напечатать имя студента всеми строчными буквами.
Enter first name:<input type = "text" ng-model = "student.firstName">
Enter last name: <input type = "text" ng-model = "student.lastName">
Name in Lower Case: {{student.fullName() | lowercase}}
валютный фильтр
Добавьте фильтр валюты к выражению, возвращающему число, используя вертикальную черту. Здесь мы добавили фильтр валюты для платы за печать в формате валюты.
Enter fees: <input type = "text" ng-model = "student.fees">
fees: {{student.fees | currency}}
фильтр фильтр
Чтобы отображать только необходимые темы, мы использовали subjectName в качестве фильтра.
Enter subject: <input type = "text" ng-model = "subjectName">
Subject:
<ul>
<li ng-repeat = "subject in student.subjects | filter: subjectName">
{{ subject.name + ', marks:' + subject.marks }}
</li>
</ul>
фильтр по порядку
Чтобы упорядочить предметы по оценкам, мы использовали orderBy Mark.
Subject:
<ul>
<li ng-repeat = "subject in student.subjects | orderBy:'marks'">
{{ subject.name + ', marks:' + subject.marks }}
</li>
</ul>
пример
В следующем примере будут продемонстрированы все вышеупомянутые фильтры.
testAngularJS.htm
<html>
<head>
<title>Angular JS Filters</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "studentController">
<table border = "0">
<tr>
<td>Enter first name:</td>
<td><input type = "text" ng-model = "student.firstName"></td>
</tr>
<tr>
<td>Enter last name: </td>
<td><input type = "text" ng-model = "student.lastName"></td>
</tr>
<tr>
<td>Enter fees: </td>
<td><input type = "text" ng-model = "student.fees"></td>
</tr>
<tr>
<td>Enter subject: </td>
<td><input type = "text" ng-model = "subjectName"></td>
</tr>
</table>
<br/>
<table border = "0">
<tr>
<td>Name in Upper Case: </td><td>{{student.fullName() | uppercase}}</td>
</tr>
<tr>
<td>Name in Lower Case: </td><td>{{student.fullName() | lowercase}}</td>
</tr>
<tr>
<td>fees: </td><td>{{student.fees | currency}}
</td>
</tr>
<tr>
<td>Subject:</td>
<td>
<ul>
<li ng-repeat = "subject in student.subjects | filter: subjectName |orderBy:'marks'">
{{ subject.name + ', marks:' + subject.marks }}
</li>
</ul>
</td>
</tr>
</table>
</div>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('studentController', function($scope) {
$scope.student = {
firstName: "Mahesh",
lastName: "Parashar",
fees:500,
subjects:[
{name:'Physics',marks:70},
{name:'Chemistry',marks:80},
{name:'Math',marks:65}
],
fullName: function() {
var studentObject;
studentObject = $scope.student;
return studentObject.firstName + " " + studentObject.lastName;
}
};
});
</script>
</body>
</html>
Вывод
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
Табличные данные обычно воспроизводимы по своей природе. Директива ng-repeat может использоваться для простого рисования таблицы. В следующем примере показано использование директивы ng-repeat для рисования таблицы.
<table>
<tr>
<th>Name</th>
<th>Marks</th>
</tr>
<tr ng-repeat = "subject in student.subjects">
<td>{{ subject.name }}</td>
<td>{{ subject.marks }}</td>
</tr>
</table>
Таблицу можно стилизовать с помощью стилей CSS.
<style>
table, th , td {
border: 1px solid grey;
border-collapse: collapse;
padding: 5px;
}
table tr:nth-child(odd) {
background-color: #f2f2f2;
}
table tr:nth-child(even) {
background-color: #ffffff;
}
</style>
пример
В следующем примере будут продемонстрированы все вышеупомянутые директивы.
testAngularJS.htm
<html>
<head>
<title>Angular JS Table</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<style>
table, th , td {
border: 1px solid grey;
border-collapse: collapse;
padding: 5px;
}
table tr:nth-child(odd) {
background-color: #f2f2f2;
}
table tr:nth-child(even) {
background-color: #ffffff;
}
</style>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "studentController">
<table border = "0">
<tr>
<td>Enter first name:</td>
<td><input type = "text" ng-model = "student.firstName"></td>
</tr>
<tr>
<td>Enter last name: </td>
<td>
<input type = "text" ng-model = "student.lastName">
</td>
</tr>
<tr>
<td>Name: </td>
<td>{{student.fullName()}}</td>
</tr>
<tr>
<td>Subject:</td>
<td>
<table>
<tr>
<th>Name</th>.
<th>Marks</th>
</tr>
<tr ng-repeat = "subject in student.subjects">
<td>{{ subject.name }}</td>
<td>{{ subject.marks }}</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('studentController', function($scope) {
$scope.student = {
firstName: "Mahesh",
lastName: "Parashar",
fees:500,
subjects:[
{name:'Physics',marks:70},
{name:'Chemistry',marks:80},
{name:'Math',marks:65},
{name:'English',marks:75},
{name:'Hindi',marks:67}
],
fullName: function() {
var studentObject;
studentObject = $scope.student;
return studentObject.firstName + " " + studentObject.lastName;
}
};
});
</script>
</body>
</html>
Вывод
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
Следующие директивы могут использоваться для привязки данных приложения к атрибутам элементов HTML DOM.
Sr. No. | Имя и описание |
---|---|
1 | ng-disabled отключает данный элемент управления. |
2 | ng-show показывает данный элемент управления. |
3 | ng-hide скрывает данный элемент управления. |
4 | ng-click представляет событие щелчка AngularJS. |
директива ng-disabled
Добавьте атрибут ng-disabled к кнопке HTML и передайте ему модель. Привяжите модель к флажку и посмотрите вариант.
<input type = "checkbox" ng-model = "enableDisableButton">Disable Button
<button ng-disabled = "enableDisableButton">Click Me!</button>
директива ng-show
Добавьте атрибут ng-show к кнопке HTML и передайте ему модель. Привяжите модель к флажку и посмотрите вариант.
<input type = "checkbox" ng-model = "showHide1">Show Button
<button ng-show = "showHide1">Click Me!</button>
директива ng-hide
Добавьте атрибут ng-hide к кнопке HTML и передайте ему модель. Привяжите модель к флажку и посмотрите вариант.
<input type = "checkbox" ng-model = "showHide2">Hide Button
<button ng-hide = "showHide2">Click Me!</button>
директива ng-click
Добавьте атрибут ng-click к кнопке HTML и обновите модель. Привяжите модель к html и посмотрите вариант.
<p>Total click: {{ clickCounter }}</p>
<button ng-click = "clickCounter = clickCounter + 1">Click Me!</button>
пример
В следующем примере будут продемонстрированы все вышеупомянутые директивы.
testAngularJS.htm
<html>
<head>
<title>AngularJS HTML DOM</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "">
<table border = "0">
<tr>
<td><input type = "checkbox" ng-model = "enableDisableButton">Disable Button</td>
<td><button ng-disabled = "enableDisableButton">Click Me!</button></td>
</tr>
<tr>
<td><input type = "checkbox" ng-model = "showHide1">Show Button</td>
<td><button ng-show = "showHide1">Click Me!</button></td>
</tr>
<tr>
<td><input type = "checkbox" ng-model = "showHide2">Hide Button</td>
<td><button ng-hide = "showHide2">Click Me!</button></td>
</tr>
<tr>
<td><p>Total click: {{ clickCounter }}</p></td>
<td><button ng-click = "clickCounter = clickCounter + 1">Click Me!</button></td>
</tr>
</table>
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
</body>
</html>
Вывод
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
AngularJS поддерживает модульный подход. Модули используются для разделения логики, например, служб, контроллеров, приложений и т. Д., И поддержания чистоты кода. Мы определяем модули в отдельных js файлах и называем их в соответствии с файлом module.js. В этом примере мы собираемся создать два модуля.
Application Module - используется для инициализации приложения с контроллером (ами).
Controller Module - используется для определения контроллера.
Модуль приложения
mainApp.js
var mainApp = angular.module("mainApp", []);
Здесь мы заявили заявку mainAppмодуль с помощью функции angular.module. Мы передали ему пустой массив. Этот массив обычно содержит зависимые модули.
Модуль контроллера
studentController.js
mainApp.controller("studentController", function($scope) {
$scope.student = {
firstName: "Mahesh",
lastName: "Parashar",
fees:500,
subjects:[
{name:'Physics',marks:70},
{name:'Chemistry',marks:80},
{name:'Math',marks:65},
{name:'English',marks:75},
{name:'Hindi',marks:67}
],
fullName: function() {
var studentObject;
studentObject = $scope.student;
return studentObject.firstName + " " + studentObject.lastName;
}
};
});
Здесь мы объявили контроллер studentController модуль с помощью функции mainApp.controller.
Использовать модули
<div ng-app = "mainApp" ng-controller = "studentController">
...
<script src = "mainApp.js"></script>
<script src = "studentController.js"></script>
</div>
Здесь мы использовали модуль приложения с помощью директивы ng-app и контроллер с помощью директивы ng-controller. Мы импортировали mainApp.js и studentController.js на главную страницу html.
пример
В следующем примере будут продемонстрированы все вышеупомянутые модули.
testAngularJS.htm
<html>
<head>
<title>Angular JS Modules</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src = "/angularjs/src/module/mainApp.js"></script>
<script src = "/angularjs/src/module/studentController.js"></script>
<style>
table, th , td {
border: 1px solid grey;
border-collapse: collapse;
padding: 5px;
}
table tr:nth-child(odd) {
background-color: #f2f2f2;
}
table tr:nth-child(even) {
background-color: #ffffff;
}
</style>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "studentController">
<table border = "0">
<tr>
<td>Enter first name:</td>
<td><input type = "text" ng-model = "student.firstName"></td>
</tr>
<tr>
<td>Enter last name: </td>
<td><input type = "text" ng-model = "student.lastName"></td>
</tr>
<tr>
<td>Name: </td>
<td>{{student.fullName()}}</td>
</tr>
<tr>
<td>Subject:</td>
<td>
<table>
<tr>
<th>Name</th>
<th>Marks</th>
</tr>
<tr ng-repeat = "subject in student.subjects">
<td>{{ subject.name }}</td>
<td>{{ subject.marks }}</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
</html>
mainApp.js
var mainApp = angular.module("mainApp", []);
studentController.js
mainApp.controller("studentController", function($scope) {
$scope.student = {
firstName: "Mahesh",
lastName: "Parashar",
fees:500,
subjects:[
{name:'Physics',marks:70},
{name:'Chemistry',marks:80},
{name:'Math',marks:65},
{name:'English',marks:75},
{name:'Hindi',marks:67}
],
fullName: function() {
var studentObject;
studentObject = $scope.student;
return studentObject.firstName + " " + studentObject.lastName;
}
};
});
Вывод
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
AngularJS расширяет возможности заполнения и проверки форм. Мы можем использовать ng-click для обработки нажатия кнопки AngularJS и использовать флаги $ dirty и $ invalid, чтобы выполнять проверки незаметным образом. Используйте novalidate с объявлением формы, чтобы отключить проверку, специфичную для браузера. Элементы управления Forms интенсивно используют события Angular. Давайте сначала кратко рассмотрим события.
События
AngularJS предоставляет несколько событий, которые могут быть связаны с элементами управления HTML. Например, ng-click обычно ассоциируется с кнопкой. Ниже перечислены поддерживаемые события в Angular JS.
- ng-click
- ng-dbl-click
- ng-mousedown
- ng-mouseup
- ng-mouseenter
- ng-mouseleave
- ng-mousemove
- ng-mouseover
- ng-keydown
- ng-keyup
- ng-keypress
- ng-change
нг-щелчок
Сбросить данные формы с помощью директивы on-click кнопки.
<input name = "firstname" type = "text" ng-model = "firstName" required>
<input name = "lastname" type = "text" ng-model = "lastName" required>
<input name = "email" type = "email" ng-model = "email" required>
<button ng-click = "reset()">Reset</button>
<script>
function studentController($scope) {
$scope.reset = function() {
$scope.firstName = "Mahesh";
$scope.lastName = "Parashar";
$scope.email = "[email protected]";
}
$scope.reset();
}
</script>
Проверить данные
Следующее можно использовать для отслеживания ошибок.
$dirty - указывает, что значение было изменено.
$invalid - указывает, что введенное значение недействительно.
$error - указывает точную ошибку.
пример
В следующем примере будут продемонстрированы все вышеупомянутые директивы.
testAngularJS.htm
<html>
<head>
<title>Angular JS Forms</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<style>
table, th , td {
border: 1px solid grey;
border-collapse: collapse;
padding: 5px;
}
table tr:nth-child(odd) {
background-color: #f2f2f2;
}
table tr:nth-child(even) {
background-color: #ffffff;
}
</style>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "studentController">
<form name = "studentForm" novalidate>
<table border = "0">
<tr>
<td>Enter first name:</td>
<td><input name = "firstname" type = "text" ng-model = "firstName" required>
<span style = "color:red" ng-show = "studentForm.firstname.$dirty && studentForm.firstname.$invalid">
<span ng-show = "studentForm.firstname.$error.required">First Name is required.</span>
</span>
</td>
</tr>
<tr>
<td>Enter last name: </td>
<td><input name = "lastname" type = "text" ng-model = "lastName" required>
<span style = "color:red" ng-show = "studentForm.lastname.$dirty && studentForm.lastname.$invalid">
<span ng-show = "studentForm.lastname.$error.required">Last Name is required.</span>
</span>
</td>
</tr>
<tr>
<td>Email: </td><td><input name = "email" type = "email" ng-model = "email" length = "100" required>
<span style = "color:red" ng-show = "studentForm.email.$dirty && studentForm.email.$invalid">
<span ng-show = "studentForm.email.$error.required">Email is required.</span>
<span ng-show = "studentForm.email.$error.email">Invalid email address.</span>
</span>
</td>
</tr>
<tr>
<td>
<button ng-click = "reset()">Reset</button>
</td>
<td>
<button ng-disabled = "studentForm.firstname.$dirty &&
studentForm.firstname.$invalid || studentForm.lastname.$dirty &&
studentForm.lastname.$invalid || studentForm.email.$dirty &&
studentForm.email.$invalid" ng-click="submit()">Submit</button>
</td>
</tr>
</table>
</form>
</div>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('studentController', function($scope) {
$scope.reset = function() {
$scope.firstName = "Mahesh";
$scope.lastName = "Parashar";
$scope.email = "[email protected]";
}
$scope.reset();
});
</script>
</body>
</html>
Вывод
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
HTML не поддерживает встраивание html-страниц в html-страницу. Для достижения этой функциональности используются следующие способы -
Using Ajax - Сделайте вызов сервера, чтобы получить соответствующую html-страницу и установить ее в innerHTML элемента управления html.
Using Server Side Includes - JSP, PHP и другие серверные веб-технологии могут включать HTML-страницы в динамические страницы.
Используя AngularJS, мы можем встраивать HTML-страницы в HTML-страницу с помощью директивы ng-include.
<div ng-app = "" ng-controller = "studentController">
<div ng-include = "'main.htm'"></div>
<div ng-include = "'subjects.htm'"></div>
</div>
пример
tryAngularJS.htm
<html>
<head>
<title>Angular JS Includes</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<style>
table, th , td {
border: 1px solid grey;
border-collapse: collapse;
padding: 5px;
}
table tr:nth-child(odd) {
background-color: #f2f2f2;
}
table tr:nth-child(even) {
background-color: #ffffff;
}
</style>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "studentController">
<div ng-include = "'/angularjs/src/include/main.htm'"></div>
<div ng-include = "'/angularjs/src/include/subjects.htm'"></div>
</div>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('studentController', function($scope) {
$scope.student = {
firstName: "Mahesh",
lastName: "Parashar",
fees:500,
subjects:[
{name:'Physics',marks:70},
{name:'Chemistry',marks:80},
{name:'Math',marks:65},
{name:'English',marks:75},
{name:'Hindi',marks:67}
],
fullName: function() {
var studentObject;
studentObject = $scope.student;
return studentObject.firstName + " " + studentObject.lastName;
}
};
});
</script>
</body>
</html>
main.htm
<table border = "0">
<tr>
<td>Enter first name:</td>
<td><input type = "text" ng-model = "student.firstName"></td>
</tr>
<tr>
<td>Enter last name: </td>
<td><input type = "text" ng-model = "student.lastName"></td>
</tr>
<tr>
<td>Name: </td>
<td>{{student.fullName()}}</td>
</tr>
</table>
subject.htm
<p>Subjects:</p>
<table>
<tr>
<th>Name</th>
<th>Marks</th>
</tr>
<tr ng-repeat = "subject in student.subjects">
<td>{{ subject.name }}</td>
<td>{{ subject.marks }}</td>
</tr>
</table>
Вывод
Чтобы запустить этот пример, вам необходимо развернуть textAngularJS.htm, main.htm и subject.htm на веб-сервере. Откройте textAngularJS.htm, используя URL-адрес вашего сервера в веб-браузере. Смотрите результат.
AngularJS предоставляет $ https: control, который работает как служба для чтения данных с сервера. Сервер обращается к базе данных для получения желаемых записей. AngularJS нужны данные в формате JSON. Когда данные будут готовы, $ https: можно использовать для получения данных с сервера следующим образом:
function studentController($scope,$https:) {
var url = "data.txt";
$https:.get(url).success( function(response) {
$scope.students = response;
});
}
Здесь файл data.txt содержит записи студентов. $ https: service выполняет вызов ajax и устанавливает ответ своим студентам свойств. Модель учеников может быть использована для рисования таблиц в HTML.
Примеры
data.txt
[
{
"Name" : "Mahesh Parashar",
"RollNo" : 101,
"Percentage" : "80%"
},
{
"Name" : "Dinkar Kad",
"RollNo" : 201,
"Percentage" : "70%"
},
{
"Name" : "Robert",
"RollNo" : 191,
"Percentage" : "75%"
},
{
"Name" : "Julian Joe",
"RollNo" : 111,
"Percentage" : "77%"
}
]
testAngularJS.htm
<html>
<head>
<title>Angular JS Includes</title>
<style>
table, th , td {
border: 1px solid grey;
border-collapse: collapse;
padding: 5px;
}
table tr:nth-child(odd) {
background-color: #f2f2f2;
}
table tr:nth-child(even) {
background-color: #ffffff;
}
</style>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "" ng-controller = "studentController">
<table>
<tr>
<th>Name</th>
<th>Roll No</th>
<th>Percentage</th>
</tr>
<tr ng-repeat = "student in students">
<td>{{ student.Name }}</td>
<td>{{ student.RollNo }}</td>
<td>{{ student.Percentage }}</td>
</tr>
</table>
</div>
<script>
function studentController($scope,$http) {
var url = "data.txt";
$http.get(url).then( function(response) {
$scope.students = response.data;
});
}
</script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js">
</script>
</body>
</html>
Вывод
Чтобы выполнить этот пример, вам необходимо развернуть файлы testAngularJS.htm и data.txt на веб-сервере. Откройте файл testAngularJS.htm, используя URL-адрес вашего сервера в веб-браузере, и посмотрите результат.
AngularJS поддерживает одностраничное приложение с помощью нескольких представлений на одной странице. Для этого AngularJS предоставил директивы ng-view и ng-template, а также сервисы $ routeProvider.
ng-view
Тег ng-view просто создает заполнитель, в котором может быть размещено соответствующее представление (представление html или ng-template) в зависимости от конфигурации.
Применение
Определите div с помощью ng-view в основном модуле.
<div ng-app = "mainApp">
...
<div ng-view></div>
</div>
ng-шаблон
Директива ng-template используется для создания представления html с использованием тега скрипта. Он содержит атрибут "id", который используется $ routeProvider для сопоставления представления с контроллером.
Применение
Определите блок скрипта с типом ng-template в основном модуле.
<div ng-app = "mainApp">
...
<script type = "text/ng-template" id = "addStudent.htm">
<h2> Add Student </h2>
{{message}}
</script>
</div>
$ routeProvider
$ routeProvider - это ключевая служба, которая устанавливает конфигурацию URL-адресов, сопоставляет их с соответствующей html-страницей или ng-шаблоном и присоединяет к ним контроллер.
Применение
Определите блок скрипта с главным модулем и установите конфигурацию маршрутизации.
var mainApp = angular.module("mainApp", ['ngRoute']);
mainApp.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/addStudent', {
templateUrl: 'addStudent.htm', controller: 'AddStudentController'
})
.when('/viewStudents', {
templateUrl: 'viewStudents.htm', controller: 'ViewStudentsController'
})
.otherwise ({
redirectTo: '/addStudent'
});
}]);
Ниже приведены важные моменты, которые следует учитывать в приведенном выше примере.
$ routeProvider определяется как функция в конфигурации модуля mainApp с использованием ключа как '$ routeProvider'.
$ routeProvider.when определяет URL-адрес "/ addStudent", который затем сопоставляется с "addStudent.htm". addStudent.htm должен находиться по тому же пути, что и основная html-страница. Если htm-страница не определена, то ng-template будет использоваться с id = "addStudent.htm". Мы использовали ng-template.
«В противном случае» используется для установки представления по умолчанию.
"controller" используется для установки соответствующего контроллера для представления.
пример
В следующем примере будут продемонстрированы все вышеупомянутые директивы.
testAngularJS.htm
<html>
<head>
<title>Angular JS Views</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.min.js">
</script>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp">
<p><a href = "#addStudent">Add Student</a></p>
<p><a href = "#viewStudents">View Students</a></p>
<div ng-view></div>
<script type = "text/ng-template" id = "addStudent.htm">
<h2> Add Student </h2>
{{message}}
</script>
<script type = "text/ng-template" id = "viewStudents.htm">
<h2> View Students </h2>
{{message}}
</script>
</div>
<script>
var mainApp = angular.module("mainApp", ['ngRoute']);
mainApp.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/addStudent', {
templateUrl: 'addStudent.htm',
controller: 'AddStudentController'
})
.when('/viewStudents', {
templateUrl: 'viewStudents.htm',
controller: 'ViewStudentsController'
})
.otherwise({
redirectTo: '/addStudent'
});
}]);
mainApp.controller('AddStudentController', function($scope) {
$scope.message = "This page will be used to display add student form";
});
mainApp.controller('ViewStudentsController', function($scope) {
$scope.message = "This page will be used to display all the students";
});
</script>
</body>
</html>
Результат
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
Область видимости - это специальный объект javascript, который играет роль контроллера соединения с представлениями. Область действия содержит данные модели. В контроллерах доступ к данным модели осуществляется через объект $ scope.
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller("shapeController", function($scope) {
$scope.message = "In shape controller";
$scope.type = "Shape";
});
</script>
Ниже приведены важные моменты, которые следует учитывать в приведенном выше примере.
$ scope передается в качестве первого аргумента контроллеру во время определения его конструктора.
$ scope.message и $ scope.type - это модели, которые будут использоваться на странице HTML.
Мы установили значения для моделей, которые будут отражены в модуле приложения, контроллером которого является shapeController.
Мы также можем определять функции в $ scope.
Наследование области
Область действия зависит от контроллера. Если мы определим вложенные контроллеры, то дочерний контроллер унаследует область действия своего родительского контроллера.
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller("shapeController", function($scope) {
$scope.message = "In shape controller";
$scope.type = "Shape";
});
mainApp.controller("circleController", function($scope) {
$scope.message = "In circle controller";
});
</script>
Ниже приведены важные моменты, которые следует учитывать в приведенном выше примере.
Мы установили значения для моделей в shapeController.
Мы переопределили сообщение в дочернем контроллере circleController. Когда «сообщение» используется в модуле контроллера circleController, будет использоваться замещенное сообщение.
пример
В следующем примере будут продемонстрированы все вышеупомянутые директивы.
testAngularJS.htm
<html>
<head>
<title>Angular JS Forms</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "shapeController">
<p>{{message}} <br/> {{type}} </p>
<div ng-controller = "circleController">
<p>{{message}} <br/> {{type}} </p>
</div>
<div ng-controller = "squareController">
<p>{{message}} <br/> {{type}} </p>
</div>
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller("shapeController", function($scope) {
$scope.message = "In shape controller";
$scope.type = "Shape";
});
mainApp.controller("circleController", function($scope) {
$scope.message = "In circle controller";
});
mainApp.controller("squareController", function($scope) {
$scope.message = "In square controller";
$scope.type = "Square";
});
</script>
</body>
</html>
Результат
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
AngularJS поддерживает концепцию «разделения проблем» с использованием архитектуры служб. Сервисы являются функциями javascript и отвечают только за выполнение определенных задач. Это делает их индивидуальной сущностью, которую можно поддерживать и тестировать. Контроллеры, фильтры могут вызывать их по мере необходимости. Сервисы обычно вводятся с использованием механизма внедрения зависимостей AngularJS.
AngularJS предоставляет множество встроенных служб, например, $ https :, $ route, $ window, $ location и т. Д. Каждая служба отвечает за конкретную задачу, например, $ https: используется для вызова ajax для получения данных сервера. $ route используется для определения маршрутной информации и так далее. Встроенные службы всегда имеют префикс $.
Есть два способа создать сервис.
- factory
- service
Заводским методом
Используя фабричный метод, мы сначала определяем фабрику, а затем назначаем ей метод.
var mainApp = angular.module("mainApp", []);
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b
}
return factory;
});
Используя сервисный метод
Используя метод службы, мы определяем службу, а затем назначаем ей метод. Мы также внедрили в него уже доступную услугу.
mainApp.service('CalcService', function(MathService) {
this.square = function(a) {
return MathService.multiply(a,a);
}
});
пример
В следующем примере будут продемонстрированы все вышеупомянутые директивы.
testAngularJS.htm
<html>
<head>
<title>Angular JS Services</title>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "CalcController">
<p>Enter a number: <input type = "number" ng-model = "number" /></p>
<button ng-click = "square()">X<sup>2</sup></button>
<p>Result: {{result}}</p>
</div>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b
}
return factory;
});
mainApp.service('CalcService', function(MathService) {
this.square = function(a) {
return MathService.multiply(a,a);
}
});
mainApp.controller('CalcController', function($scope, CalcService) {
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
</script>
</body>
</html>
Результат
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
Внедрение зависимостей - это шаблон разработки программного обеспечения, в котором компонентам присваиваются зависимости вместо жесткого кодирования их внутри компонента. Это освобождает компонент от поиска зависимости и делает зависимости настраиваемыми. Это помогает сделать компоненты повторно используемыми, обслуживаемыми и тестируемыми.
AngularJS предоставляет превосходный механизм внедрения зависимостей. Он предоставляет следующие основные компоненты, которые можно вводить друг в друга как зависимости.
- value
- factory
- service
- provider
- constant
значение
value - это простой объект javascript, который используется для передачи значений контроллеру на этапе настройки.
//define a module
var mainApp = angular.module("mainApp", []);
//create a value object as "defaultInput" and pass it a data.
mainApp.value("defaultInput", 5);
...
//inject the value in the controller using its name "defaultInput"
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
$scope.number = defaultInput;
$scope.result = CalcService.square($scope.number);
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
фабрика
factory - это функция, которая используется для возврата значения. Он создает ценность по запросу, когда этого требует сервис или контроллер. Обычно он использует заводскую функцию для вычисления и возврата значения.
//define a module
var mainApp = angular.module("mainApp", []);
//create a factory "MathService" which provides a method multiply to return multiplication of two numbers
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b
}
return factory;
});
//inject the factory "MathService" in a service to utilize the multiply method of factory.
mainApp.service('CalcService', function(MathService) {
this.square = function(a) {
return MathService.multiply(a,a);
}
});
...
служба
service - это одноэлементный объект javascript, содержащий набор функций для выполнения определенных задач. Сервисы определяются с помощью функций service (), а затем вводятся в контроллеры.
//define a module
var mainApp = angular.module("mainApp", []);
...
//create a service which defines a method square to return square of a number.
mainApp.service('CalcService', function(MathService) {
this.square = function(a) {
return MathService.multiply(a,a);
}
});
//inject the service "CalcService" into the controller
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
$scope.number = defaultInput;
$scope.result = CalcService.square($scope.number);
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
провайдер
Provider используется AngularJS внутри компании для создания служб, фабрик и т. д. на этапе настройки (этап, во время которого AngularJS загружается). Упомянутый ниже сценарий можно использовать для создания MathService, который мы создали ранее. Provider - это специальный фабричный метод с методом get (), который используется для возврата значения / service / factory.
//define a module
var mainApp = angular.module("mainApp", []);
...
//create a service using provider which defines a method square to return square of a number.
mainApp.config(function($provide) {
$provide.provider('MathService', function() {
this.$get = function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b;
}
return factory;
};
});
});
постоянный
константы используются для передачи значений на этапе конфигурации, учитывая тот факт, что значение не может использоваться для передачи на этапе конфигурации.
mainApp.constant("configParam", "constant value");
пример
В следующем примере будут продемонстрированы все вышеупомянутые директивы.
testAngularJS.htm
<html>
<head>
<title>AngularJS Dependency Injection</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "CalcController">
<p>Enter a number: <input type = "number" ng-model = "number" /></p>
<button ng-click = "square()">X<sup>2</sup></button>
<p>Result: {{result}}</p>
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.config(function($provide) {
$provide.provider('MathService', function() {
this.$get = function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b;
}
return factory;
};
});
});
mainApp.value("defaultInput", 5);
mainApp.factory('MathService', function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b;
}
return factory;
});
mainApp.service('CalcService', function(MathService) {
this.square = function(a) {
return MathService.multiply(a,a);
}
});
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
$scope.number = defaultInput;
$scope.result = CalcService.square($scope.number);
$scope.square = function() {
$scope.result = CalcService.square($scope.number);
}
});
</script>
</body>
</html>
Результат
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
Пользовательские директивы используются в AngularJS для расширения функциональности HTML. Пользовательские директивы определяются с помощью функции «директива». Специальная директива просто заменяет элемент, для которого она активирована. Приложение AngularJS во время начальной загрузки находит совпадающие элементы и выполняет одноразовое действие, используя метод compile () настраиваемой директивы, затем обрабатывает элемент с помощью метода link () настраиваемой директивы на основе области действия директивы. AngularJS поддерживает создание настраиваемых директив для следующих типов элементов.
Element directives - Директива активируется при обнаружении совпадающего элемента.
Attribute - Директива активируется при обнаружении соответствующего атрибута.
CSS - Директива активируется при обнаружении подходящего стиля css.
Comment - Директива активируется при обнаружении совпадающего комментария.
Понимание настраиваемой директивы
Определите пользовательские теги HTML.
<student name = "Mahesh"></student><br/>
<student name = "Piyush"></student>
Определите настраиваемую директиву для обработки указанных выше настраиваемых тегов html.
var mainApp = angular.module("mainApp", []);
//Create a directive, first parameter is the html element to be attached.
//We are attaching student html tag.
//This directive will be activated as soon as any student element is encountered in html
mainApp.directive('student', function() {
//define the directive object
var directive = {};
//restrict = E, signifies that directive is Element directive
directive.restrict = 'E';
//template replaces the complete element with its text.
directive.template = "Student: <b>{{student.name}}</b> ,
Roll No: <b>{{student.rollno}}</b>";
//scope is used to distinguish each student element based on criteria.
directive.scope = {
student : "=name"
}
//compile is called during application initialization. AngularJS calls
it once when html page is loaded.
directive.compile = function(element, attributes) {
element.css("border", "1px solid #cccccc");
//linkFunction is linked with each element with scope to get the element specific data.
var linkFunction = function($scope, element, attributes) {
element.html("Student: <b>"+$scope.student.name +"</b> ,
Roll No: <b>"+$scope.student.rollno+"</b><br/>");
element.css("background-color", "#ff00ff");
}
return linkFunction;
}
return directive;
});
Определите контроллер для обновления области действия директивы. Здесь мы используем значение атрибута name в качестве дочернего элемента области.
mainApp.controller('StudentController', function($scope) {
$scope.Mahesh = {};
$scope.Mahesh.name = "Mahesh Parashar";
$scope.Mahesh.rollno = 1;
$scope.Piyush = {};
$scope.Piyush.name = "Piyush Parashar";
$scope.Piyush.rollno = 2;
});
пример
<html>
<head>
<title>Angular JS Custom Directives</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "StudentController">
<student name = "Mahesh"></student><br/>
<student name = "Piyush"></student>
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.directive('student', function() {
var directive = {};
directive.restrict = 'E';
directive.template = "Student: <b>{{student.name}}</b> ,
Roll No: <b>{{student.rollno}}</b>";
directive.scope = {
student : "=name"
}
directive.compile = function(element, attributes) {
element.css("border", "1px solid #cccccc");
var linkFunction = function($scope, element, attributes) {
element.html("Student: <b>"+$scope.student.name +"</b> ,
Roll No: <b>"+$scope.student.rollno+"</b><br/>");
element.css("background-color", "#ff00ff");
}
return linkFunction;
}
return directive;
});
mainApp.controller('StudentController', function($scope) {
$scope.Mahesh = {};
$scope.Mahesh.name = "Mahesh Parashar";
$scope.Mahesh.rollno = 1;
$scope.Piyush = {};
$scope.Piyush.name = "Piyush Parashar";
$scope.Piyush.rollno = 2;
});
</script>
</body>
</html>
Результат
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
AngularJS поддерживает встроенную интернационализацию для трех типов фильтров: валюты, даты и чисел. Нам нужно только включить соответствующие js в соответствии с локалью страны. По умолчанию он обрабатывает языковой стандарт браузера. Например, чтобы использовать датский язык, используйте следующий сценарий.
<script src = "https://code.angularjs.org/1.2.5/i18n/angular-locale_da-dk.js">
</script>
Пример использования датского языка
testAngularJS.htm
<html>
<head>
<title>Angular JS Forms</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "StudentController">
{{fees | currency }} <br/><br/>
{{admissiondate | date }} <br/><br/>
{{rollno | number }}
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js">
</script>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('StudentController', function($scope) {
$scope.fees = 100;
$scope.admissiondate = new Date();
$scope.rollno = 123.45;
});
</script>
</body>
</html>
Результат
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
Пример использования локали браузера
testAngularJS.htm
<html>
<head>
<title>Angular JS Forms</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "StudentController">
{{fees | currency }} <br/><br/>
{{admissiondate | date }} <br/><br/>
{{rollno | number }}
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<!-- <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js">
</script> -->
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('StudentController', function($scope) {
$scope.fees = 100;
$scope.admissiondate = new Date();
$scope.rollno = 123.45;
});
</script>
</body>
</html>
Результат
Откройте textAngularJS.htm в веб-браузере. Смотрите результат.
AngularJS поддерживает встроенную интернационализацию для трех типов фильтров: валюты, даты и чисел. Нам нужно только включить соответствующий java-скрипт в соответствии с региональным стандартом страны. По умолчанию он учитывает языковой стандарт браузера. Например, для датского языка используйте следующий скрипт -
<script src = "https://code.angularjs.org/1.2.5/i18n/angular-locale_da-dk.js">
</script>
Пример использования датского языкового стандарта
testAngularJS.htm
<html>
<head>
<title>Angular JS Forms</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "StudentController">
{{fees | currency }} <br/><br/>
{{admissiondate | date }} <br/><br/>
{{rollno | number }}
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js">
</script>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('StudentController', function($scope) {
$scope.fees = 100;
$scope.admissiondate = new Date();
$scope.rollno = 123.45;
});
</script>
</body>
</html>
Вывод
Откройте файл testAngularJS.htm в веб-браузере и посмотрите результат.
Пример использования языкового стандарта браузера
testAngularJS.htm
<html>
<head>
<title>Angular JS Forms</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "StudentController">
{{fees | currency }} <br/><br/>
{{admissiondate | date }} <br/><br/>
{{rollno | number }}
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<!-- <script src = "https://code.angularjs.org/1.3.14/i18n/angular-locale_da-dk.js">
</script> -->
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('StudentController', function($scope) {
$scope.fees = 100;
$scope.admissiondate = new Date();
$scope.rollno = 123.45;
});
</script>
</body>
</html>
Вывод
Откройте файл testAngularJS.htm в веб-браузере и посмотрите результат.