Angular JS Tutorial

AngularJS Scopes

ЁЯУМ AngularJS Scope рдХреНрдпрд╛ рд╣реИ?

AngularJS рдореЗрдВ $scope рдПрдХ object рд╣реЛрддрд╛ рд╣реИ рдЬреЛ Controller рдФрд░ View (HTML) рдХреЗ рдмреАрдЪ data рдХреЛ connect рдХрд░рддрд╛ рд╣реИред

рдЖрд╕рд╛рди рднрд╛рд╖рд╛ рдореЗрдВ: $scope рд╡реЛ bridge рд╣реИ рдЬреЛ Controller рдореЗрдВ рд░рдЦрд╛ data, HTML (View) рддрдХ рдкрд╣реБрдБрдЪрд╛рддрд╛ рд╣реИред


ЁЯОп рд╕реНрдХреЛрдк рдХрд╛ рдХрд╛рдо рдХреНрдпрд╛ рд╣реИ?

  • Controller рдореЗрдВ рдмрдиреЗ variables рдХреЛ View рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдирд╛
  • View рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ Controller рддрдХ рдкрд╣реБрдБрдЪрд╛рдирд╛
  • Two-way data binding рдХреЛ possible рдмрдирд╛рдирд╛
  • AngularJS expressions рдФрд░ bindings рдХреЛ рдХрд╛рдо рдореЗрдВ рд▓рд╛рдирд╛

тЬНя╕П Basic Syntax:

app.controller("myCtrl", function($scope) {
  $scope.name = "Amit";
});
<p>{{ name }}</p>

рдпрд╣рд╛рдБ name рдХрд╛ data $scope рдХреЗ рдЬрд╝рд░рд┐рдП Controller рд╕реЗ HTML рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИред


ЁЯзк Example: Scope in Action

<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
  <script>
    var app = angular.module("myApp", []);
    app.controller("myCtrl", function($scope) {
      $scope.firstName = "Rahul";
      $scope.lastName = "Sharma";
    });
  </script>
</head>
<body ng-controller="myCtrl">

<h3>Full Name: {{ firstName + " " + lastName }}</h3>

</body>
</html>

Output: Full Name: Rahul Sharma


ЁЯз▒ Scope Hierarchy (Hierarchy of Scopes)

AngularJS рдореЗрдВ scopes hierarchical (layer-wise) рд╣реЛрддреЗ рд╣реИрдВ тАФ рдпрд╛рдиреА parent-child structure рдореЗрдВред

Root Scope
 тФЬтФАтФА Controller 1 Scope
 тФЬтФАтФА Controller 2 Scope
      тФФтФАтФА Child Controller Scope

рдорддрд▓рдм: рдПрдХ Controller рдХрд╛ scope рд╕рд┐рд░реНрдл рдЙрд╕реА controller рдХреЗ рдЕрдВрджрд░ valid рд╣реЛрддрд╛ рд╣реИред


ЁЯФД Example: Nested Scopes

<div ng-app="myApp" ng-controller="parentCtrl">
  Parent Name: {{ name }}
  
  <div ng-controller="childCtrl">
    <br>Child Name: {{ name }}
  </div>
</div>

<script>
var app = angular.module("myApp", []);
app.controller("parentCtrl", function($scope) {
  $scope.name = "Parent";
});
app.controller("childCtrl", function($scope) {
  $scope.name = "Child";
});
</script>

тЬЕ Output:

Parent Name: Parent
Child Name: Child

Child controller рдЕрдкрдиреЗ рдЕрд▓рдЧ $scope рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


ЁЯУж Scope Object рдореЗрдВ рдХреНрдпрд╛-рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

  • Strings ($scope.name = "Amit")
  • Numbers ($scope.age = 25)
  • Arrays ($scope.items = [1,2,3])
  • Objects ($scope.student = {name: "Anu", marks: 88})
  • Functions ($scope.greet = function() { ... })

ЁЯТб Best Practices:

тЬЕ $scope рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕рд┐рд░реНрдл data рдФрд░ logic рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ
тЭМ DOM manipulation (document.getElementById) рдирд╛ рдХрд░реЗрдВ
тЬЕ рд╣рд░ controller рдХрд╛ рдЕрд▓рдЧ $scope рд░рдЦрдирд╛ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ
тЬЕ Reusable data рдХреЛ рдПрдХ common parent scope рдореЗрдВ рд░рдЦреЗрдВ


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

  1. AngularJS рдореЗрдВ $scope рдХрд╛ рдХреНрдпрд╛ role рд╣реИ?
  2. рдХреНрдпрд╛ рджреЛ controllers рдПрдХ рд╣реА $scope share рдХрд░рддреЗ рд╣реИрдВ?
  3. рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ output рдмрддрд╛рдЗрдП:
$scope.a = 5;
$scope.b = 10;
$scope.sum = function() {
  return $scope.a + $scope.b;
};
<p>{{ sum() }}</p>

тЬЕ рдЖрдкрдиреЗ рдХреНрдпрд╛ рд╕реАрдЦрд╛?

  • AngularJS $scope рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ
  • рдХреИрд╕реЗ Controller рдФрд░ View рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
  • Nested scopes рдФрд░ рдЙрдирдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░
  • Scope object рдореЗрдВ рдХреНрдпрд╛-рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  • Practice questions

ЁЯОп рдЕрдм рдЖрдк AngularJS рдХреА binding logic рдФрд░ structure рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ!