angular .module('app', []) .controller('MainCtrl', function () { });
function MainCtrl () { } angular .module('app', []) .controller('MainCtrl', MainCtrl);
function MainCtrl ($scope) { $scope.items = [{ name: ' ', id: 7297510 },{ name: '', id: 0278916 },{ name: '', id: 2389017 },{ name: '', id: 1000983 }]; } angular .module('app') .controller('MainCtrl', MainCtrl);
<div ng-controller="MainCtrl"> <ul> <li ng-repeat="item in items"> {{ item.name }} </li> </ul> </div>
function MainCtrl () { this.items = [{ name: ' ', id: 7297510 },{ name: '', id: 0278916 },{ name: '', id: 2389017 },{ name: '', id: 1000983 }]; } angular .module('app') .controller('MainCtrl', MainCtrl);
<div ng-controller="MainCtrl as main"> <ul> <li ng-repeat="item in main.items"> {{ item.name }} </li> </ul> </div>
function UserService () { this.sayHello = function (name) { return ' ' + name; }; } angular .module('app') .service('UserService', UserService);
function MainCtrl (UserService) { this.sayHello = function (name) { UserService.sayHello(name); }; } angular .module('app') .controller('MainCtrl', MainCtrl);
function UserService () { var UserService = {}; function greeting (name) { return ' ' + name; } UserService.sayHello = function (name) { return greeting(name); }; return UserService; } angular .module('app') .factory('UserService', UserService);
function MainCtrl (UserService) { this.sayHello = function (name) { UserService.sayHello(name); }; } angular .module('app') .controller('MainCtrl', MainCtrl);
function MainCtrl () { this.items = [{ name: ' ', id: 7297510 },{ name: '', id: 0278916 },{ name: '', id: 2389017 },{ name: '', id: 1000983 }]; } angular .module('app') .controller('MainCtrl', MainCtrl);
<div ng-controller="MainCtrl as main"> {{ main.items.length }} . </div>
<div ng-controller="MainCtrl as main"> <div> {{ main.items.length }} . </div> <ul> <li ng-repeat="item in main.items" ng-click="main.removeFromStock(item, $index)"> {{ item.name }} </li> </ul> </div>
function MainCtrl () { this.removeFromStock = function (item, index) { this.items.splice(index, 1); }; this.items = [...]; } angular .module('app') .controller('MainCtrl', MainCtrl);
var vm = this; vm β ViewModel. . : function MainCtrl () { var vm = this; vm.removeFromStock = function (item, index) { vm.items.splice(index, 1); }; vm.items = [...]; } angular .module('app') .controller('MainCtrl', MainCtrl);
<ul> <li ng-repeat="item in main.items"> {{ item }} </li> </ul>
Message: {{main.message}}
<input type="text" ng-model="main.message"> <a href=" ng-click="main.showMessage(main.message);"> </a>
<a ng-href="{{ main.someValue }}">Go</a> <img ng-src="{{ main.anotherValue}}" alt=">
<div class="notification" ng-class="{ warning: main.response == 'error', ok: main.response == 'success' }"> {{ main.responseMsg }} </div>
<a href=" ng-click="showMenu = !showMenu"> !</a> <ul ng-show="showMenu"> <li>1</li> <li>2</li> <li>3</li> </ul>
<div ng-if="main.userExists"> </div>
<div ng-switch on="main.user.access"> <div ng-switch-when="admin"> <!-- code for admins --> </div> <div ng-switch-when="user"> <!-- code for users --> </div> <div ng-switch-when="author"> <!-- code for authors --> </div> </div>
<p>{{ main.name }}</p> <p ng-bind="main.name"></p>
<my-element></my-element> <div my-element></div> <div class="my-element"></div> <!-- directive: my-element -->
<my-element> ! </my-element>
{ template: '<div>' + '<ul>' + '<li ng-repeat="item in vm.items">' + '{{ item }}' + '</li>' + '</ul>' + '</div>' }
{ template: [ '<div>', '<ul>', '<li ng-repeat="item in vm.items">', '{{ item }}', '</li>', '</ul>', '</div>' ].join('') }
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
, .
:
{ templateUrl: 'items.html' }
Angular DOM id, , HTTP GET.
<script type="text/ng-template" id="/hello.html"> <div> <ul> <li ng-repeat="item in vm.items"> {{ item }} </li> </ul> </div> </script>
text/ng-template, , JavaScript. , . template, . , Angular , ng-include ng-view. Angular GET- .
$templateCache .
9.4 API
API , . β return, . , .
function someDirective () { return { }; } angular .module('app') .directive('someDirective', someDirective);
.
function someDirective () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'something', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="some-directive">', 'My directive!', '</div>' ].join('') }; } angular .module('app') .directive('someDirective', someDirective);
9.4.1 restrict
restrict β . , 'A'. 'E', β 'M' β 'C'.
9.4.2 replace
. <some-directive></some-directive>
replace: true, .
9.4.3 scope
$scope , . $scope , .
9.4.4 controllerAs
, . controllerAs: 'something', something.myMethod()
9.4.5 controller
. MainCtrl , controller: 'MainCtrl'. controller: function () {}. ViewModel .
9.4.6 link
link , DOM, - -, Angular.
DOM, link. $scope, $element $attrs, DOM, {{ }}. link , Angular.
9.5
, βemailβ, To, Subject Message.
<compose-email>
, . DOM , , . .
function composeEmail () { return { restrict: 'EA', replace: true, scope: true, controllerAs: 'compose', controller: function () { }, link: function ($scope, $element, $attrs) { }, template: [ '<div class="compose-email">', '<input type="text" placeholder="To..." ng-model="compose.to">', '<input type="text" placeholder="Subject..." ng-model="compose.subject">', '<textarea placeholder="Message..." ng-model="compose.message"></textarea>', '</div>' ].join('') }; } angular .module('app') .controller('composeEmail', composeEmail);
composeEmail , HTML. , Angular , composeEmail <compose-email></compose-email>
10
, - . , , , . .
DOM | , Angular, $filter, JavaScript HTML.
HTML :
{{ filter_expression | filter : expression : comparator }}
JavaScript :
$filter('filter')(array, expression, comparator);
HTML. .
10.1
, Angular . $scope.timeNow = new Date().getTime():
<p> : {{ timeNow | date:'dd-MM-yyyy' }} </p>
10.2 JSON
JSON JavaScript JSON. DOM . JSON </code> <source lang="html"> <pre> {{ myObject | json }}
10.3 limitTo orderBy
β . ?
limitTo , β ng-repeat.
<ul> <li ng-repeat="user in users | limitTo:10"> {{ user.name }} </li> </ul>
10 . limitTo ng-repeat.
orderBy , . :
{ name: 'Todd Motto', }
:
<ul> <li ng-repeat=" user in users | orderBy:'name' "> {{ user.name }} </li> </ul>
.
11
. Angular API. . $digest.
11.1
, . .filter(). .
, .
function myFilter () { return function () { // }; } angular .module('app') .filter('myFilter', myFilter);
. ( Angular ).
function toLowercase () { return function (item) { return item.toLowerCase(); }; } angular .module('app') .filter('toLowercase', toLowercase);
item . , :
<p>{{ user.name | toLowercase }}</p>
11.2
. , . , , 'A'.
function namesStartingWithA () { return function (items) { return items.filter(function (item) { return /$a/i.test(item.name); }); }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
ng-repeat:
<ul> <li ng-repeat="item in items | namesStartingWithA"> {{ item }} </li> </ul>
:
<ul> <li ng-repeat="item in items | namesStartingWithA:something"> {{ item }} </li> </ul>
something :
function namesStartingWithA () { return function (items, something) { // "items", "something" }; } angular .module('app') .filter('namesStartingWithA', namesStartingWithA);
11.3
.filter(), , . , this.namesStartingWithA, , . controllerAs.
function SomeCtrl () { this.namesStartingWithA = function () { }; } angular .module('app') .controller('SomeCtrl', SomeCtrl);
DOM :
<ul> <li ng-repeat="item in vm.items | filter:namesStartingWithA"> {{ item }} </li> </ul>
12 $routeProvider
Angular, : Angular . , , URL. ngRoute
angular .module('app', [ 'ngRoute' ]);
, , $routeProvider .config(). .when().
, β «» /inbox , . .when() , URL. β . .otherwise(), .
function router ($routeProvider) { $routeProvider .when('/inbox', {}) .otherwise({ redirectTo: '/inbox' }); } angular .module('app') .config(router);
, . , inbox.html.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html' }) .otherwise({ redirectTo: '/inbox' });
. Angular controller controllerAs.
$routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .otherwise({ redirectTo: '/inbox' });
, β , . , URL ( id ..). . , id 173921938 /inbox/email/173921938, - '/inbox/email/:id'.
/inbox/email/173921938, Angular , /inbox/email/902827312.
:
function router ($routeProvider) { $routeProvider .when('/inbox', { templateUrl: 'views/inbox.html', controller: 'InboxCtrl', controllerAs: 'inbox' }) .when('/inbox/email/:id', { templateUrl: 'views/email.html', controller: 'EmailCtrl', controllerAs: 'email' }) .otherwise({ redirectTo: '/inbox' }); }); angular .module('app') .config(router);
, . , . ng-view. - :
<div ng-view></div>
URL Angular, , . , .
12.1 $routeParams
$routeParams URL , . , id :id
, $routeParams:
function EmailCtrl ($routeParams, EmailService) { // $routeParams { id: 20999851 } EmailService .get($routeParams.id) // .success(function (response) {}) .error(function (reason) {}); } angular .module('app') .('EmailCtrl', EmailCtrl);
13
, , DOM .
, .
<form name="myForm"></form>
Angular , , , ..
13.1 HTML5
HTML5 pattern, . Angular . , Angular , required ng-required, . Angular.
13.2 $pristine
Angular $pristine β , . Angular ng-pristine , .
13.4 $dirty
pristine β , . ng-dirty, ng-pristine . $pristine .
13.5 $valid
$valid. , ng-required, , ng-valid
13.6 $invalid
valid. , $invalid β ng-invalid. , .
13.7
β , - . , . , .
<input type="text" ng-model="user.name" placeholder=" "> <button ng-disabled="!user.name.length"> </button>
user.name.length true, . , .
14 $http $resource
Angular API, $http $resource. , $digest, .
14.1 $http
jQuery $.ajax, . $http . $http({...}), $http.get(...). $http API , $q.
, . HTTP- GET:
$http.get('/url') .success(function (data, status, headers, config) { }) .error(function (data, status, headers, config) { });
, , . , :
$http.get('/url') .success(function (response) { }) .error(function (reason) { });
.then(), Angular:
$http.get('/url') .then(function (response) { // }, function (reason) { // });
jQuery, Angular $http $scope.$apply(), .
14.2 $resource
$http ngResource. API $resource, CRUD- (create, read, update, delete). $resource , REST.
function MovieService ($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } } ); } angular .module('app') .factory('MovieService', MovieService);
Movies .
function MovieCtrl (MovieService) { var movies = new MovieService(); // movies.update(/* some data */); } angular .module('app') .controller('MovieCtrl', MovieCtrl);
Source: https://habr.com/ru/post/247283/
All Articles