AngularJSред рдбреЗрдЯрд╛ рд╕рдВрдЧрдарди

рдЬреИрд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдврд╝рддрд╛ рд╣реИ, JSON рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред



рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкреБрд╕реНрддрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдЬ рдмрдирд╛рдПрдБред рдирд┐рдпрдВрддреНрд░рдХ:



app.controller('BookController', ['$scope', function($scope) { $scope.book = { id: 1, name: 'Harry Potter', author: 'JK Rowling', stores: [ { id: 1, name: 'Barnes & Noble', quantity: 3}, { id: 2, name: 'Waterstones', quantity: 2}, { id: 3, name: 'Book Depository', quantity: 5} ] }; }]);
      
      





рдирд┐рдпрдВрддреНрд░рдХ рдкреБрд╕реНрддрдХ рдореЙрдбрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреГрд╢реНрдп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



 <div ng-controller="BookController"> Id: <span ng-bind="book.id"></span> <br/> Name:<input type="text" ng-model="book.name" /> <br/> Author: <input type="text" ng-model="book.author" /> </div>
      
      





рдЬрдм рдкреБрд╕реНрддрдХ рдбреЗрдЯрд╛ рдХреЛ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк $ http рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 app.controller('BookController', ['$scope', '$http', function($scope, $http) { var bookId = 1; $http.get('ourserver/books/' + bookId).success(function(bookData) { $scope.book = bookData; }); }]);
      
      





рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ bookData рдЕрднреА рднреА рдПрдХ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред



рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдПрдВ, рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдпрд╛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрд╡рд░ рдпреВрдЖрд░рдПрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



 app.controller('BookController', ['$scope', '$http', function($scope, $http) { var bookId = 1; $http.get('ourserver/books/' + bookId).success(function(bookData) { $scope.book = bookData; }); $scope.deleteBook = function() { $http.delete('ourserver/books/' + bookId); }; $scope.updateBook = function() { $http.put('ourserver/books/' + bookId, $scope.book); }; $scope.getBookImageUrl = function(width, height) { return 'our/image/service/' + bookId + '/width/height'; }; $scope.isAvailable = function() { if (!$scope.book.stores || $scope.book.stores.length === 0) { return false; } return $scope.book.stores.some(function(store) { return store.quantity > 0; }); }; }]);
      
      





рд╣рдо рдЗрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреГрд╢реНрдп рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ:



 <div ng-controller="BookController"> <div ng-style="{ backgroundImage: 'url(' + getBookImageUrl(100, 100) + ')' }"></div> Id: <span ng-bind="book.id"></span> <br/> Name:<input type="text" ng-model="book.name" /> <br/> Author: <input type="text" ng-model="book.author" /> <br/> Is Available: <span ng-bind="isAvailable() ? 'Yes' : 'No' "></span> <br/> <button ng-click="deleteBook()">Delete</button> <br/> <button ng-click="updateBook()">Update</button> </div>
      
      





рдХрдИ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛



рдпрджрд┐ рд╣рдорд╛рд░реЗ рддрд░реАрдХреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдврд╝рддрд╛ рд╣реИ, рдХрдИ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХрдИ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреБрд╕реНрддрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реЛрдЧреА рдЬреЛ рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд░рд╛рдЬреНрдп рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИрдВред



 app.factory('Book', ['$http', function($http) { function Book(bookData) { if (bookData) { this.setData(bookData): } //-,       }; Book.prototype = { setData: function(bookData) { angular.extend(this, bookData); }, load: function(id) { var scope = this; $http.get('ourserver/books/' + bookId).success(function(bookData) { scope.setData(bookData); }); }, delete: function() { $http.delete('ourserver/books/' + bookId); }, update: function() { $http.put('ourserver/books/' + bookId, this); }, getImageUrl: function(width, height) { return 'our/image/service/' + this.book.id + '/width/height'; }, isAvailable: function() { if (!this.book.stores || this.book.stores.length === 0) { return false; } return this.book.stores.some(function(store) { return store.quantity > 0; }); } }; return Book; }]);
      
      





рд╣рдо рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕реЗрд╡реНрд░рд┐рд╕ рдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



 app.controller('BookController', ['$scope', 'Book', function($scope, Book) { $scope.book = new Book(); $scope.book.load(1); }]);
      
      





рдЕрдм рдЬрдм рд╕рднреА рддрд░реНрдХ рдореЙрдбрд▓ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рд╢реЗрд╖ рд╣реИрдВ: рдкреБрд╕реНрддрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рдФрд░ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рджреГрд╢реНрдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬреЛ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



 <div ng-controller="BookController"> <div ng-style="{ backgroundImage: 'url(' + book.getImageUrl(100, 100) + ')' }"></div> Id: <span ng-bind="book.id"></span> <br/> Name:<input type="text" ng-model="book.name" /> <br/> Author: <input type="text" ng-model="book.author" /> <br/> Is Available: <span ng-bind="book.isAvailable() ? 'Yes' : 'No' "></span> <br/> <button ng-click="book.delete()">Delete</button> <br/> <button ng-click="book.update()">Update</button> </div>
      
      





рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреБрдХ рд╕реЗрд╡рд╛ рдФрд░ рдХрдИ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИрдВ рдЬреЛ рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рд╕реНрддреБрдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдПрдХ рдЦрд╛рдореА рд╣реИред рдпрджрд┐ рджреЛ рдирд┐рдпрдВрддреНрд░рдХ рдПрдХ рд╣реА рдкреБрд╕реНрддрдХ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рджреЛ рдкреГрд╖реНрда рд╣реИрдВ: рдПрдХ рдкреБрд╕реНрддрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде, рдФрд░ рджреВрд╕рд░рд╛ рдкреБрд╕реНрддрдХ рдкреНрд░рдмрдВрдзрди рд░реВрдк рдХреЗ рд╕рд╛рдеред рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдирд┐рдпрдВрддреНрд░рдХ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдкреБрд╕реНрддрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреВрд╕рд░реА рдЬрд╛рдирдХрд╛рд░реАред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреВрд╕рд░реЗ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рдкреБрд╕реНрддрдХ рдХрд╛ рдирд╛рдо рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ "рд╕рд╣реЗрдЬреЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИред рдЕрджреНрдпрддрди рд╕рдлрд▓ рд╣реИ, рдФрд░ рдкреБрд╕реНрддрдХ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рд╡рд╣ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдкреБрд╕реНрддрдХреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкреБрд░рд╛рдирд╛ рдирд╛рдо рджреЗрдЦреЗрдЧрд╛ред рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣реА рдкреБрд╕реНрддрдХ рдХреА рджреЛ рдкреНрд░рддрд┐рдпрд╛рдВ рдереАрдВ: рдПрдХ рдкреБрд╕реНрддрдХ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░реА рдкреБрд╕реНрддрдХ рдкреНрд░рдмрдВрдзрди рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдПред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдХреЗрд╡рд▓ рдкреБрд╕реНрддрдХ рдкреНрд░рдмрдВрдзрди рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛, рджреВрд╕рд░реА рдкреНрд░рддрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реАред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдкреБрд╕реНрддрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЖрдк рджреВрд╕рд░реЗ рдкреГрд╖реНрда рдкрд░ рдкреБрд╕реНрддрдХ рдХрд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреБрд╕реНрддрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рджреЛрдиреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред

рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо bookManager рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВрдЧреЗ (рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд░рд┐рд╕ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╡рд╕реНрддреБ рд╣реЛрдЧреА), рдЬреЛ рдкреБрд╕реНрддрдХреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдЧреА рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧреАред рдпрджрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рдкреБрд╕реНрддрдХ рд▓реЛрдб рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддреЛ BookManager рдЗрд╕реЗ рд▓реЛрдб рдХрд░реЗрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХреА рдЧрдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд▓реМрдЯрд╛ рджреЗрдЧрд╛ред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдмреИрдХ-рдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдкреБрд╕реНрддрдХреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рдХреЗрд╡рд▓ рдмреБрдХрдореИрди рд╕реЗрд╡рд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдШрдЯрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдпрд╣ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред



 app.factory('booksManager', ['$http', '$q', 'Book', function($http, $q, Book) { var booksManager = { _pool: {}, _retrieveInstance: function(bookId, bookData) { var instance = this._pool[bookId]; if (instance) { instance.setData(bookData); } else { instance = new Book(bookData); this._pool[bookId] = instance; } return instance; }, _search: function(bookId) { return this._pool[bookId]; }, _load: function(bookId, deferred) { var scope = this; $http.get('ourserver/books/' + bookId) .success(function(bookData) { var book = scope._retrieveInstance(bookData.id, bookData); deferred.resolve(book); }) .error(function() { deferred.reject(); }); }, /* */ /*    */ getBook: function(bookId) { var deferred = $q.defer(); var book = this._search(bookId); if (book) { deferred.resolve(book); } else { this._load(bookId, deferred); } return deferred.promise; }, /*    */ loadAllBooks: function() { var deferred = $q.defer(); var scope = this; $http.get('ourserver/books') .success(function(booksArray) { var books = []; booksArray.forEach(function(bookData) { var book = scope._retrieveInstance(bookData.id, bookData); books.push(book); }); deferred.resolve(books); }) .error(function() { deferred.reject(); }); return deferred.promise; }, /*  */ setBook: function(bookData) { var scope = this; var book = this._search(bookData.id); if (book) { book.setData(bookData); } else { book = scope._retrieveInstance(bookData); } return book; }, }; return booksManager; }]);
      
      





рд╕рдмрдорд┐рд╢рди рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред



рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВрдЧреЗ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рдореВрд▓: www.webdeveasy.com/angularjs-data-model



All Articles