
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдирд┐рд░реНрджреЗрд╢ рдПрдВрдЧреБрд▓рд░рдЬ рдХреА рдШреЛрд╖рдгрд╛рддреНрдордХ рд╢реИрд▓реА рдХрд╛ рдореБрдЦреНрдп рдЖрдХрд░реНрд╖рдг рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк
рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд Angularjs рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐
рдЙрдирдореЗрдВ рд╕реЗ
рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ : "рдХреГрдкрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ, рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд▓рдн рдФрд░ рд╕рдВрд░рдЪрд┐рдд рдХрд░реЗрдВред рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ Angularjs рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрдард┐рди рд╣реИ "(" рдХреГрдкрдпрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдХреЛрдгреАрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИ ")ред рдЗрд╕рд╕реЗ рдЕрд╕рд╣рдордд рд╣реЛрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдкреНрд░рд▓реЗрдЦрди рдЕрднреА рднреА рдирдо рд╣реИ рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рддрд░реНрдХ рдФрд░ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдХреА рдореЗрд░реА рдореБрдлреНрдд рд░рд┐рдЯреЗрд▓рд┐рдВрдЧ рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рд╕рдордп рдмрдЪреЗрдЧрд╛, рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рд╕рдорд░реНрдерди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдкрд░ рднреА рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред рддреЛ рдЪрд▓рд┐рдП!
рдирд┐рд░реНрджреЗрд╢ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ?
рдПрдВрдЧреБрд▓рд░рдЬ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
angular.module('moduleName', []) .directive('directiveName', function () { }) .directive('anotherDirectiveName', function () { });
рдЙрдирдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд▓рдВрдмреЗ рд╡рд┐рдХрд▓реНрдкред
рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рд░рд▓ рддрд░реАрдХрд╛
рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ HTML рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЗрд╕реЗ рд▓рд┐рдВрдХрд┐рдВрдЧ
рд▓рд┐рдВрдХрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ) рдХрд╛рд░рдЦрд╛рдиреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛:
angular.module('moduleName', []) .directive('directiveName', function () { return function(scope,element,attrs){ } });
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
- рдЧреБрдВрдЬрд╛рдЗрд╢ - рд╡рд╣ рджрд╛рдпрд░рд╛ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
- рддрддреНрд╡ - DOM рддрддреНрд╡ рдЬреЛ jQuery рд▓рд╛рдЗрдЯ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ
- attrs - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдЯреИрдЧ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреИрдЧ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ
рдЖрдЗрдП рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдо рдРрд╕рд╛ рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдЬрд┐рд╕реЗ
рд╣реИрдмреНрд░рд╛-рд╣рдмреНрд░ рдХрд╣рддреЗ рд╣реИрдВ ), рдЬреЛ рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдореЛрдбрд╝ рджреЗрдЧрд╛ рдФрд░ рд▓реЗрдЖрдЙрдЯ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╣рдо рдХрдВрдЯреНрд░реЛрд▓рд░ рд╡реЗрд░рд┐рдПрдмрд▓ (
forExampleController ) рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЙрд╕реА рдЯреИрдЧ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ (
рд╣реИрдмреНрд░рд╛ ) рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ред рдФрд░ рдирд┐рд░реНрджреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдирд┐рдпрдВрддреНрд░рдХ рдЪрд░ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рдЖрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВ:
[
jsFiddle ]
<div ng-app="helloHabrahabr"> <div ng-controller="forExampleController"> <input ng-model="word"> <span habra-habr="word" habra="Nehabra"></span> </div> </div>
function forExampleController($scope) { $scope.word="Habrahabra" } angular.module('helloHabrahabr', []) .directive('habraHabr', function() { return function($scope, element, attrs) { $scope.$watch(attrs.habraHabr,function(value){ element.text(value+attrs.habra); }); } });
рд╡рд╣ рд╕рдм рд╣реИред рд╣рдорд╛рд░реЗ рдЖрджрд┐рдо рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рддреИрдпрд╛рд░ рд╣реИред рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд░реВрдк рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд┐рдХрд▓реНрдк
рдЕрдкрдиреЗ рдкреВрд░реНрдг рд░реВрдк рдореЗрдВ, рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
angular.module('moduleName', []) .directive('directiveName', function () { return { compile: function compile(temaplateElement, templateAttrs) { return { pre: function (scope, element, attrs) { }, post: function(scope, element, attrs) { } } }, link: function (scope, element, attrs) { }, priority: 0, terminal:false, template: '<div></div>', templateUrl: 'template.html', replace: false, transclude: false, restrict: 'A', scope: false, controller: function ($scope, $element, $attrs, $transclude, otherInjectables) { } } });
рдпреЗ рд╕рднреА рдЧреБрдг рдХрд╛рдлреА рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдФрд░ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдФрд░ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдЕрд░реНрде рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рд▓рд┐рдВрдХ рдФрд░ рд╕рдВрдХрд▓рди
рд▓рд┐рдВрдХ рд╡рд┐рдзрд┐ рдмрд╣реБрдд рд╣реА рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛рд░рдЦрд╛рдиреЗ рдиреЗ рд▓рдШреБ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрдЧреБрд▓рд┐рд░рд╛рдЬ рдореЗрдВ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рд╕рдВрдХрд▓рди - рдЗрд╕ DOM рддрддреНрд╡ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рднреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг (рдЗрд╕рдХреЗ рдмрдЪреНрдЪреЗ рд╡рдВрд╢рдЬ рд╕рд╣рд┐рдд)
- рд▓рд┐рдВрдХрд┐рдВрдЧ - рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдФрд░ рджрд╛рдпрд░реЗ рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдЬреЛрдбрд╝рдирд╛
рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╕рд░рд▓рддрдо рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЙрдиреНрдирдд рдПрдХ рджреЛрдиреЛрдВ рдореЗрдВ, рд▓рд┐рдВрдХ рд╡рд┐рдзрд┐ рд╕рд╣реА рдврдВрдЧ рд╕реЗ
рдкреЛрд╕реНрдЯрд▓рд┐рдВрдХ рдХреЛ рдмреБрд▓рд╛рдПрдЧреА , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЪрд░ рдкрд╣рд▓реЗ рд╣реА рдореИрдк рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдХ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ред
[
jsFiddle ]
angular.module('helloHabrahabr', []) .directive('habraHabr', function() { return { link:function($scope, element, attrs) { $scope.$watch(attrs.habraHabr,function(value){ element.text(value+attrs.habra); } ); } } });
рдпрд╣реА рд╣реИ, рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЛ DOM
element.text (...) рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд╕рдВрдкрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрджрд░
"{{}}} рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
[
jsFiddle ]
angular.module('helloHabrahabr', []) .directive('habraHabrNotwork', function() { return { link:function($scope, element, attrs) { element.html("<div>{{"+attrs.habraHabrWork+"}}"+attrs.habra+"</div>"); } } }) .directive('habraHabrWork', function() { return { compile: function compile(templateElement, templateAttrs) { templateElement.html("<div>{{"+templateAttrs.habraHabrWork+"}}"+templateAttrs.habra+"</div>"); }, link: function (scope, element, attrs) { } } });
рдЙрджрд╛рд╣рд░рдг рддрдорд╛рддрдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рдж рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
habraHabrNotwork рдирд┐рд░реНрджреЗрд╢ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ
рдХрд░реЗрдЧрд╛ , рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреЛрд╕реНрдЯрд▓рд┐рдВрдХ рдореЗрдВ рдЪрд░ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢ "{{}}" рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рд╕рдВрдХрд▓рди рдФрд░ рд▓рд┐рдВрдХрд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдВрдЧреБрд▓рд░рдЬ рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ "{{}}" рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдЬреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рдПрдХ рдФрд░ рдмрд╛рдд, рджреВрд╕рд░рд╛ рдирд┐рд░реНрджреЗрд╢ред рд╕рдм рдХреБрдЫ рдЕрдкрдиреА рдЬрдЧрд╣ рдкрд░ рд╣реИ, рд╣рдо рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ "{{" + Attrs.habraHabrNotwork + "+" + "attrs.habra +"}} рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
рд╣рдореЗрдВ
рд╕рдВрдХрд▓рди рдкрджреНрдзрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреЛрд╕реНрдЯрд▓рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдкреВрд░реНрд╡ рдФрд░ рдкреЛрд╕реНрдЯред рдЬрд╣рд╛рдВ рдкреНрд░реА рдФрд░ рдкреЛрд╕реНрдЯ рдХреНрд░рдорд╢рдГ рдкреНрд░реАрд▓рд┐рдВрдХ рдФрд░ рдкреЛрд╕реНрдЯрд▓рд┐рдВрдХ рддрд░реАрдХреЗ рд╣реИрдВред рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рд╕реЗ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо
рд▓рд┐рдВрдХ рдП рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ
рд▓рд┐рдВрдХ рдФрд░ рдбреЛрдо рдореЗрдВ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
[
jsFiddle ]
<div ng-app="helloHabrahabr"> <div ng-controller="forExampleController"> <input ng-model="word"> <span habra-habr-work="word" habra="NehabraParent"> <span habra-habr-work="word" habra="NehabraChild"></span> </span> <pre>{{log}}</pre> </div> </div>
function forExampleController($scope) { $scope.word="Habrahabra"; $scope.log=""; } angular.module('helloHabrahabr', []) .directive('habraHabrWork', function() { return { compile: function compile(templateElement, templateAttrs) { templateElement.prepend("<div>{{"+templateAttrs.habraHabrWork+"}}"+templateAttrs.habra+"</div>"); return { pre: function ($scope, element, attrs, controller) { $scope.log+=templateAttrs.habra +' preLink \n'; }, post: function ($scope, element, attrs, controller) { $scope.log+=templateAttrs.habra +' postLink \n'; } } } } });
рдЗрд╕ рдкрд░ рдореИрдВрдиреЗ рд╡рд┐рд░рд╛рдо рджреЗрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ред рдпрджрд┐ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рджрд┐рдиреЛрдВ рдореЗрдВ рдореИрдВ рдЧреБрдВрдЬрд╛рдЗрд╢ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реАрдХреНрд╡рд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред