AngularJS

няшка и помощник по дому и хозяйству

JS мир и JQuery до и после

  • Нет структуры, хаос, бардак, насилие
  • Слабые абстракции
  • Решение зависимостей на пользователе
  • Пишите код везде (от работы с DOM, до манипуляции данными)

Hello, {username} на JQuery

<html>
<head>
  <meta charset="UTF-8">
  <title>JQuery world</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
  Введите ваше имя: <input type="name" id="name" />  
  <h1 id="show_name"></h1>
  
  <script type="text/javascript">
    $(document).ready(function(){

      $('#name').keyup(function(){
        $('#show_name').html( 'Hello, ' +$(this).val() );
      });

    })
  </script>
</body>
</html>
  • Отсутсвие абстракций и структуры
  • По локоть обеими руками в DOM
  • А что если хотим в JS?
<html ng-app>
<head>
  <meta charset="UTF-8">
  <title>AngularJS</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
</head>
<body>

  <input type="text" ng-model="name" />
  <h1 ng-show="name">Hello, {{name}}</h1>
  
</body>
</html>
<html ng-app>
<head>
  <meta charset="UTF-8">
  <title>AngularJS</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
</head>
<body>

  <h1 ng-show="name">Hello, {{name}}</h1>

  <button ng-click="name = 'Ура'">Click me</button>
  
</body>
</html>

Что нам дает AngularJS

  • Структурирование (модули, html интерфейс, css представление, js логика)
  • Связывание данных (2-way binding)
  • Абстракция от DOM
  • Сервисы
  • Директивы
<html ng-app="Mailbox">
<head>
  <meta charset="UTF-8">
  <title>AngularJS</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
</head>
<body ng-controller="Inbox">

  <h1>Привет, {{name}}</h1>
  <ul>
    <li ng-repeat="mail in mails">
      От: {{mail.sender}}, Тема: "{{mail.subject}}"
    </li>
  </ul>

  <script type="text/javascript">
    angular.module('Mailbox', []).controller('Inbox', function($scope) {
      $scope.name = 'Ренат';
      $scope.mails = [
        {sender: 'Махно', subject: 'Привет, как дила, клевая ава!'},
        {sender: 'Муссолини', subject: 'Барбариска по захвату Киргизстана'},
        {sender: 'Вэйдер', subject: 'Давно не виделись'},
      ];      
    });
  </script>
  
</body>
</html>

HTML - интерфейс

<h1>Привет, {{name}}</h1>
<ul>
  <li ng-repeat="mail in mails">
    От: {{mail.sender}}, Тема: "{{mail.subject}}"
  </li>
</ul>

CSS - представление

  li:hover{
    color: white;
    background: red;
  }

JavaScript - логика

$scope.showMessage = function(msg){
  alert('Hello' + msg);
};
<html ng-app="Mailbox">
<head>
  <meta charset="UTF-8">
  <title>AngularJS</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
  <style>
  li:hover{
    color: white;
    background: red;
  }
  </style>
</head>
<body ng-controller="Inbox">

  <h1>Привет, {{name}}</h1>
  <ul>
    <li ng-repeat="mail in mails" ng-click="showMessage(mail.msg)">
      От: {{mail.sender}}, Тема: "{{mail.subject}}"
    </li>
  </ul>

  <script type="text/javascript">
    angular.module('Mailbox', []).controller('Inbox', function($scope) {
      $scope.name = 'Ренат';
      $scope.mails = [
        {sender: 'Махно', subject: 'Привет, как дила, клевая ава!', msg: 'Осень наступила'},
        {sender: 'Муссолини', subject: 'Барбариска по захвату Киргизстана', msg: 'И так, ходи свиньей, руби клином!'},
        {sender: 'Вэйдер', subject: 'Давно не виделись', msg: 'Империя в опастносте, в Звездном флоте бунт!'},
      ];      
      $scope.showMessage = function(msg){
        alert(msg);
      };
    });

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

Что еще есть в AngularJS?

Services

angular.module('Mailbox.services', []).
  factory('MailService', function($http) {

    var mail = {};

    mail.fetchAll = function() {
      return $http({
        method: 'JSON', 
        url: 'http://aomega.co/mailbox?user=renat'
      });
    }

    return mail;
  });

Routes

angular.module('Mailbox', [
  'Mailbox.services',
  'Mailbox.controllers',
  'ngRoute'
]).
config(['$routeProvider', function($routeProvider) {
  $routeProvider.
	when("/inbox", {templateUrl: "partials/inbox.html", controller: "Inbox"}).
	when("/mail/:id", {templateUrl: "partials/mail.html", controller: "Mail"}).
	otherwise({redirectTo: '/inbox'});
}]);

Filters

<li ng-repeat="mail in mails | filter: nameFilter">
$scope.searchFilter = function (mail) {
    var key = new RegExp($scope.nameFilter, 'i');
    return !$scope.nameFilter || key.test(mail.subject) || key.test(mail.msg);
};

Directives

<body>
 <mailbox></mailbox>
</body>
angular.module('Mailbox.directives').directive('mailbox', function () {
    return {
        template: '<ul>' + 
          '<li ng-repeat="mail in mails">' + 
            '{{mail.subject}} ({{mail.from}))' +
          '</li>' + 
        '</ul>'
    };
});

ВОПРОСЫ?

Renat - independent contractor
http://mrak7.com & http://aomega.co

AngularJS - полезняшка

By mpak

AngularJS - полезняшка

санук-сабай или иди нах*й не мешай

  • 550