AngularJS





В чем причина популярности AngularJs?
- Динамическая структура
- Команда из 20 человек работает над его развитием
-
Гибкость и расширяемость
- Хорошая производительность
- Имеет хорошую документацию и кучу примеров
- Большое количество готовых модулей
- Популярность - большое комьюнити
Для того чтобы начать изучать AngularJs нужно сделать одну вещь...
Нужно Забыть jQuery



В процессе обучения Впечатления от Angular меняються
Основные фичи AngularJs
- Дерективы
- Двустороннее связывание данных
- HTML Templates
- Фильтры
- Внешнее связывание
- Тестируемость
Дерективы
Element
<ng-view></ng-view>
Attribute
<div ng-view></div>
Class
<div class="ng-view"><div>
Sample
<tabset>
<tab ng-repeat="tab in tabs" heading="{{tab.title}}"
active="tab.active" disabled="tab.disabled">
{{tab.content}}
</tab>
</tabset>
Дерективы бывают
Дерективы - ядра
<div ng-controller="main as m">
Дерективы - события
<button ng-click="sendData()">Отпарвить</button>
Дерективы отображения
<div ng-hide="false">Меня не видно</div>
Собственные дерективы
<ui-pagination cur="pagination.cur" total="pagination.total" display="9"></ui-pagination>
HTML
VIEW
<div class="pagination pagination-large pagination-centered" display="12" total="pagination.total" cur="pagination.cur">
<ul>
<li class="" ng-click="goToFirstPage()" ng-class="{disabled: firstPage()}">
<a href="">
<i class="icon-step-backward"></i>
</a>
</li>
</ul>
</div>
Связывание данных
<input type="text" ng-model="yourName" placeholder="Ввудите свое имя">
<h1>Привет {{yourName}}</h1>

HTML Templates
Includes
Тоже самое что php include() но делает это Angular.<div ng-include src="test.html"</div>
Repeats
<ul>
<li ng-repeat="job in day.jobs">
{{job.name}}
</li>
</ul>
Фильтры
<ul><li ng-repeat="person in persons | orderBy: 'lastname'">{{ person.firstname }}, {{ person.lastname | uppercase }}</li></ul>
Внешнее связывание
angular.module('railsApp', ['ngRoute']) .config(function ($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/main.html', controller: 'MainCtrl' }.otherwise({ redirectTo: '/' }); });
- Легко установить Routes
- Если перейти на "/pizza/locations"
- Route подхватит нужный template по url
- Поддерживается HTML 5 history API
- Поддерживает url для старых браузеров
Тестируемость
- Angular был спроектирован так, чтобы максимально облегчить тестирование
- AngularJS встроен движок для комплексных (end-to-end) тестов
- Можно использовать Karma test runner + Jasmine
Структура приложения

Пример приложения - HTML
<div ng-app>
<center>
<h1>Todo List</h1>
</center>
<div ng-controller="toDoCtrl">
<div class="content">
<div class="header">
<form action="">
<button type="submit" ng-click="addTodo()">
<span class="entypo-list-add"></span>
</button>
<input type="text" ng-model="todoFld" placeholder="Add todo here!" />
</form>
</div>
<div class="todoItem" ng-repeat="todo in todos">
<span ng-class="{done:todo.done}" contenteditable="true">{{todo.text}}</span>
<button ng-click="todos.splice($index, 1)">
<span class="entypo-cancel"></span>
</button>
<button ng-click="doneTodo($index)">
<span class="entypo-check"></span>
</button>
</div>
</div>
</div>
</div>
Пример приложения - javascript
function toDoCtrl($scope) {
$scope.todoFld = ""
$scope.todos = [
{
text: "Test Data",
done:false
},{
text: "Test Data2",
done:false
}
];
$scope.addTodo = function () {
if ($scope.todoFld != "") {
$scope.todos.push({text: $scope.todoFld , val: $scope.valFld});
$scope.todoFld = "";
}
};
$scope.doneTodo = function($index) {
$scope.todos[$index].done = !$scope.todos[$index].done;
};
}
Пример риложения - Результат
jQuery
var data = [
{
text: "Test Data",
done:false
},{
text: "Test Data2",
done:false
}
];
var todotemp = $("#todotemp > .todoItem");
var header = $(".content");
var renderData = function (data,$to){
for(var i=0;i<data.length;i++){
var clone = todotemp.clone();
clone.find("span").eq(0).text(data[i].text);
$to.append(clone);
}
}
var dataClear = function(){
header.find(".todoItem").remove();
}
$("#form").submit(function(event){
event.preventDefault();
data.push({
text: $("#todoFld").val(),
done:false
});
dataClear();
renderData(data,header);
$("#todoFld").val("");
});
$(document).on("click",".remove",function(){
dataClear();
data.splice($(this).index()-1,1);
renderData(data,header);
});
$(document).on("click",".check",function(){
$(this).parent().find("span").eq(0).toggleClass("done");
});
renderData(data,header);
Результат jQuery
Вопросы?

AngularJs - AngularJs – Супер-героический фреймворк
By Tek
AngularJs - AngularJs – Супер-героический фреймворк
- 665