Angular JS Tutorial

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 CodeHTML рдЫреЛрдЯрд╛, 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

ValueMeaningExample
'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-compilescope/data bind рдХрд░рдирд╛, event attach рдХрд░рдирд╛

ЁЯза рдЕрднреНрдпрд╛рд╕ рдкреНрд░рд╢реНрди (Exercise)

  1. Custom Directive рдХрд╛ рдХреНрдпрд╛ рдлрд╝рд╛рдпрджрд╛ рд╣реИ?
  2. restrict: 'A' рдФрд░ restrict: 'E' рдореЗрдВ рдХреНрдпрд╛ рдлрд░реНрдХ рд╣реИ?
  3. рдиреАрдЪреЗ рджрд┐рдП рдЧрдП 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” тЬЕ