AngularJS Custom Directives
ЁЯУМ Custom Directive рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
AngularJS рдореЗрдВ рдЖрдк рдЕрдкрдиреЗ custom HTML tags, attributes, рдпрд╛ elements рдЦреБрдж рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ AngularJS Directives рдХрд╣рддрд╛ рд╣реИ рдпрд╛рдирд┐ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ HTML Directive рдмрдирд╛рдирд╛ред
рдЖрд╕рд╛рди рднрд╛рд╖рд╛ рдореЗрдВ: рдЬреИрд╕реЗ AngularJS рдореЗрдВ
ng-model
,ng-repeat
,ng-show
рд╣реЛрддреЗ рд╣реИрдВ тАФ рд╡реИрд╕реЗ рд╣реА рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛my-card
,user-info
,quiz-box
directive рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
ЁЯОп Custom Directive рдХреНрдпреЛрдВ рдЬрд╝рд░реВрд░реА рд╣реИ?
рдлрд╛рдпрджрд╛ | рд╡рдЬрд╣ |
---|---|
Reusability | рдмрд╛рд░-рдмрд╛рд░ use рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ HTML рдПрдХ рдЬрдЧрд╣ define |
Clean Code | HTML рдЫреЛрдЯрд╛, readable рдФрд░ maintainable рд╣реЛрддрд╛ рд╣реИ |
Component-based UI | рдЬреИрд╕реЗ modern frameworks рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ |
DOM Control | рдЖрдк element рдХреЗ behavior рдХреЛ control рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ |
тЬЕ Directive Define рдХрд░рдиреЗ рдХрд╛ Basic Syntax
app.directive("directiveName", function() {
return {
restrict: 'E', // рдпрд╛ 'A', 'C', 'M'
template: "<h3>Hello Custom Directive!</h3>"
};
});
рдпрд╣ рдПрдХ simple directive рдмрдирд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ
<directive-name></directive-name>
рд╕реЗ call рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
тЬЕ Example 1: Simple Element Directive
app.directive("myMessage", function() {
return {
restrict: 'E',
template: "<div class='w3-panel w3-green'>Welcome to AngularJS!</div>"
};
});
HTML рдореЗрдВ Use:
<my-message></my-message>
рдпрд╣ custom HTML tag рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
тЬЕ Example 2: Attribute Directive
app.directive("highlight", function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.css("background-color", attrs.highlight || "yellow");
}
};
});
HTML рдореЗрдВ Use:
<p highlight="lightblue">This text is highlighted!</p>
Attribute value рдХреЗ рдЕрдиреБрд╕рд╛рд░ background-color set рд╣реЛрдЧрд╛ред
тЬЕ restrict
Options
Value | Meaning | Example |
---|---|---|
'E' | Element | <my-directive></my-directive> |
'A' | Attribute | <div my-directive></div> |
'C' | Class | <div class="my-directive"></div> |
'M' | Comment | <!-- directive: my-directive --> |
тЬЕ рдЖрдк multiple рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: restrict: 'EA'
тЬЕ Example 3: Directive with scope
Binding
app.directive("userCard", function() {
return {
restrict: "E",
scope: {
name: "@", // Attribute value binding
age: "=" // Two-way binding
},
template: `
<div class="w3-card w3-padding w3-light-grey">
<h3>{{ name }}</h3>
<p>Age: {{ age }}</p>
</div>
`
};
});
HTML рдореЗрдВ Use:
<user-card name="Amit" age="userAge"></user-card>
Parent scope рд╕реЗ data bind рд╣реЛрдХрд░ directive рдореЗрдВ рдкрд╣реБрдВрдЪреЗрдЧрд╛ред
тЬЕ Example 4: Directive with External Template
app.directive("footerSection", function() {
return {
restrict: 'E',
templateUrl: "footer.html"
};
});
HTML рдореЗрдВ Use:
<footer-section></footer-section>
Template рдХреЛ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рд░рдЦрдирд╛ modular рдмрдирд╛рддрд╛ рд╣реИред
тЪЩя╕П Bonus: Link Function vs Compile Function
Function | рдХрдм рдЪрд▓рддрд╛ рд╣реИ? | Use |
---|---|---|
compile() | DOM compile рдХрд░рддреЗ рд╕рдордп | DOM structure change рдХрд░рдирд╛ |
link() | Post-compile | scope/data bind рдХрд░рдирд╛, event attach рдХрд░рдирд╛ |
ЁЯза рдЕрднреНрдпрд╛рд╕ рдкреНрд░рд╢реНрди (Exercise)
- Custom Directive рдХрд╛ рдХреНрдпрд╛ рдлрд╝рд╛рдпрджрд╛ рд╣реИ?
restrict: 'A'
рдФрд░restrict: 'E'
рдореЗрдВ рдХреНрдпрд╛ рдлрд░реНрдХ рд╣реИ?- рдиреАрдЪреЗ рджрд┐рдП рдЧрдП code рдХрд╛ output рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
app.directive("greet", function() {
return {
restrict: 'E',
template: "<h1>Hello from directive!</h1>"
};
});
<greet></greet>
тЬЕ рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╕реАрдЦрд╛?
- AngularJS рдореЗрдВ custom directives рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ
restrict
options рд╕реЗ directive рдХреИрд╕реЗ call рд╣реЛрддрд╛ рд╣реИ- Element, Attribute, Class-based directives рдмрдирд╛рдирд╛
scope
binding рд╕реЗ dynamic data pass рдХрд░рдирд╛- Reusable рдФрд░ modular HTML components рдмрдирд╛рдирд╛
ЁЯОп рдЕрдм рдЖрдк AngularJS рдореЗрдВ рдЦреБрдж рдХреЗ component-style HTML elements рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ тАФ рдмрд┐рд▓реНрдХреБрд▓ modern frameworks рдХреА рддрд░рд╣!
рдЕрдЧрд▓рд╛ advanced chapter рд╣реЛрдЧрд╛:
ЁЯСЙ тАЬAngularJS $watch, $digest & $applyтАЭ тАФ рдЬрд┐рд╕рд╕реЗ рдЖрдк AngularJS рдХреЗ two-way binding рдХрд╛ рдЕрдВрджрд░реВрдиреА рд╕рд┐рд╕реНрдЯрдо рд╕рдордЭ рдкрд╛рдПрдБрдЧреЗред
рдЕрдЧрд░ рдЖрдк рддреИрдпрд╛рд░ рд╣реИрдВ рддреЛ рдХрд╣рд┐рдП тАФ
“рдЕрдЧрд▓рд╛ рдЪреИрдкреНрдЯрд░ рд╢реБрд░реВ рдХрд░реЛ: AngularJS $watch, $digest & $apply” тЬЕ