$ স্কোপ এবং $ রুটস্কোপের মধ্যে পার্থক্য


91

$ সুযোগ এবং $ রুটস্কোপের মধ্যে পার্থক্যটি কি কেউ ব্যাখ্যা করতে পারেন?

আমি মনে করি

$ সুযোগ:

আমরা এটি ব্যবহার করে নির্দিষ্ট পৃষ্ঠা থেকে বিশেষ নিয়ামক হিসাবে এনজি-মডেল বৈশিষ্ট্য পেতে পারি।


$ রুটস্কোপ

আমরা এটি ব্যবহার করে যে কোনও পৃষ্ঠা থেকে যে কোনও নিয়ামকের সমস্ত এনজি-মডেল বৈশিষ্ট্য পেতে পারি।


এটা কি সঠিক? নাকি অন্য কিছু?


@ কোডেরর! আপনি যা বলতে চাইছেন, সেই লিঙ্কটি আমার প্রশ্নে কোনও সহায়তা করে না, সেখানে $ সুযোগ রয়েছে $ মূল, একটি $ রুটস্কোপ নয়

ang রুটস্কোপটি আপনার কৌণিক অ্যাপ্লিকেশানের সমস্ত স্কোপের হায়ারার্কির শীর্ষে রয়েছে।
অঙ্গদ 12

উত্তর:


88

"$ রুটস্কোপ" একটি ওয়েব পৃষ্ঠায় তৈরি সমস্ত "$ স্কোপ" কৌনিক বস্তুর একটি প্যারেন্ট অবজেক্ট।

এখানে চিত্র বর্ণনা লিখুন

$ স্কোপটি তৈরি করা হয় ng-controllerযখন $ রুটস্কোপটি তৈরি করা হয় ng-app

এখানে চিত্র বর্ণনা লিখুন


69

মূল পার্থক্য হ'ল অবজেক্টের সাথে অর্পিত সম্পত্তিটির প্রাপ্যতা। নির্ধারিত সম্পত্তি $scopeকন্ট্রোলারের বাইরে ব্যবহার করা যায় না যেখানে এটি সংজ্ঞায়িত হয় তবে নির্ধারিত সম্পত্তি $rootScopeকোথাও ব্যবহার করা যেতে পারে।

উদাহরণ: প্রতিস্থাপন আপনি নীচের উদাহরণে তাহলে $rootScopeসঙ্গে $scopeবিভাগের সম্পত্তি দ্বিতীয় প্রথম নিয়ামক থেকে জনবহুল করা হইনি

angular.module('example', [])
  .controller('GreetController', ['$scope', '$rootScope',
    function($scope, $rootScope) {
      $scope.name = 'World';
      $rootScope.department = 'Angular';
    }
  ])
  .controller('ListController', ['$scope',
    function($scope) {
      $scope.names = ['Igor', 'Misko', 'Vojta'];
    }
  ]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="example">
  <div class="show-scope-demo">
    <div ng-controller="GreetController">
      Hello {{name}}!
    </div>
    <div ng-controller="ListController">
      <ol>
        <li ng-repeat="name in names">{{name}} from {{department}}</li>
      </ol>
    </div>
  </div>
</body>


18

অ্যাঙ্গুলার এর বিকাশকারীদের স্কোপগুলিতে গাইড অনুসারে :

প্রতিটি কৌণিক অ্যাপ্লিকেশনটির হুবহু এক মূল সুযোগ থাকে তবে এতে বেশ কয়েকটি শিশু স্কোপ থাকতে পারে। অ্যাপ্লিকেশনটিতে একাধিক স্কোপ থাকতে পারে, কারণ কিছু নির্দেশনা নতুন শিশু স্কোপ তৈরি করে (কোন নির্দেশিকা নতুন স্কোপগুলি তৈরি করে তা দেখতে নির্দেশিক ডকুমেন্টেশন দেখুন)। যখন নতুন স্কোপগুলি তৈরি করা হয় তখন এগুলি তাদের পিতামাতার স্কোপের শিশু হিসাবে যুক্ত করা হয়। এটি একটি গাছের কাঠামো তৈরি করে যা ডম-এর সমান্তরাল যেখানে তারা সংযুক্ত রয়েছে।

নিয়ামক এবং নির্দেশিকা উভয়েরই ক্ষেত্রের রেফারেন্স রয়েছে তবে একে অপরের কাছে নয়। এই ব্যবস্থাটি নিয়ামককে নির্দেশের পাশাপাশি ডিওএম থেকে পৃথক করে। এটি একটি গুরুত্বপূর্ণ বিষয়, কারণ এটি নিয়ন্ত্রকদের অজ্ঞেয় দেখতে দেয়, যা অ্যাপ্লিকেশনগুলির পরীক্ষার গল্পকে ব্যাপকভাবে উন্নত করে।


13

$rootScopeআপনি যে কোনও নিয়ামকই থাকুন না কেন, বিশ্বব্যাপী উপলভ্য, যদিও $scopeএটি কেবলমাত্র বর্তমান নিয়ামক এবং এটি শিশুদের জন্য উপলব্ধ।


3

অন্য উপায়ে আমরা এটি দেখতে পারি; স্থানীয় $rootScopeথাকাকালীন বিশ্বব্যাপী $scope। যখন Controllerকোনও পৃষ্ঠায় বরাদ্দ করা হয়, সুতরাং এখানে একটি $scopeপরিবর্তনশীল ব্যবহার করা যেতে পারে কারণ এটি এই নিয়ামকের সাথে আবদ্ধ। তবে যখন আমরা এর মান অন্যান্য নিয়ামক বা পরিষেবাগুলিতে ভাগ করতে চাই, তখন $rootScopeব্যবহার করা হয় (** বিকল্প উপায় রয়েছে, আমরা মূল্যবোধগুলি জুড়ে দিতে পারি তবে এই ক্ষেত্রে আমরা ব্যবহার করতে চাই $rootScope)।

এই দুটি শব্দকে আপনি কীভাবে সংজ্ঞা দিচ্ছেন সে সম্পর্কে আপনার দ্বিতীয় প্রশ্নটি সঠিক।

অবশেষে কিছুটা ট্র্যাক বন্ধ, দয়া করে $rootScopeযত্ন সহ ব্যবহার করুন । আপনি বৈশ্বিক চলক যেভাবে ব্যবহার করেন তার অনুরূপ, ডিবাগ করার জন্য ব্যথা হতে পারে এবং আপনি দুর্ঘটনাক্রমে একটি টাইমার বা এমন কিছু যা আপনার পড়াশোনাকে ভুল করে তোলে এমন কোনও জায়গায় গ্লোবাল ভেরিয়েবল পরিবর্তন করতে পারেন।


2

প্রতিটি অ্যাপ্লিকেশনটির কমপক্ষে একটি একক রুটস্কোপ থাকে এবং এর লাইফসাইকেলটি অ্যাপ্লিকেশনটির মতো এবং প্রতিটি কন্ট্রোলারের নিজস্ব স্কোপ থাকতে পারে, এটি অন্যের সাথে ভাগ করা যায় না।

এই নিবন্ধটি একবার দেখুন:

https://github.com/angular/angular.js/wiki/Unders સમજ- স্কোপস


2

আমি আপনাকে স্কোপগুলির জন্য সরকারী গভীরতর কৌনিক ডকুমেন্টেশন পড়ার পরামর্শ দিচ্ছি। 'স্কোপ হাইয়ারচি' বিভাগটি শুরু করুন:

https://docs.angularjs.org/guide/scope

মূলত, $ রুটস্কোপ এবং $ স্কোপ উভয়ই ডিওএমের নির্দিষ্ট অংশগুলি চিহ্নিত করে যার মধ্যে

  • কৌণিক অপারেশন করা হয়
  • ভেরিয়েবলগুলি $ রুটস্কোপ বা $ স্কোপগুলির অংশ হিসাবে ঘোষিত হয়

$ রুটস্কোপের সাথে সম্পর্কিত যে কোনও কিছুই বিশ্বব্যাপী আপনার কৌণিক অ্যাপ্লিকেশন জুড়ে উপলব্ধ, যেখানে কোনও $ স্কোপের সাথে সম্পর্কিত যে কোনও কিছুই সেই সুযোগটি প্রযোজ্য DOM এর অংশেই উপলব্ধ।

$ রুটস্কোপটি ডিওএম উপাদানটিতে প্রয়োগ করা হয় যা কৌণিক অ্যাপের জন্য মূল উপাদান (তাই নামটি $ রুটস্কোপ)) আপনি যখন ডিওএম এর কোনও উপাদানের সাথে এনজি-অ্যাপ্লিকেশন নির্দেশিকা যুক্ত করেন, এটি ডিওমের মূল উপাদান হয়ে যায় যার মধ্যে $ রুটস্কোপ উপলব্ধ। অন্য কথায়, S রুটস্কোপের বৈশিষ্ট্যগুলি ইত্যাদি আপনার পুরো কৌণিক অ্যাপ্লিকেশন জুড়ে উপলব্ধ।

একটি কৌণিক $ স্কোপ (এবং এটির সমস্ত ভেরিয়েবল এবং ক্রিয়াকলাপ) আপনার অ্যাপ্লিকেশনের মধ্যেই ডিওএমের একটি নির্দিষ্ট উপসেটের জন্য উপলব্ধ। বিশেষত, কোনও নির্দিষ্ট নিয়ামকের জন্য স্কোপটি ডিওএমের যে অংশে সেই নির্দিষ্ট নিয়ামক প্রয়োগ করা হয়েছিল (এনজি-নিয়ামক নির্দেশিকা ব্যবহার করে) উপলব্ধ রয়েছে। উল্লেখ্য যে নির্দিষ্ট নির্দেশাবলী যেমন এনজি-রিপিট, যখন ডিওএমের এমন কোনও অংশের মধ্যে প্রয়োগ করা হয় যেখানে নিয়ামক প্রয়োগ করা হয়েছে, একই স্ক্রোলারের মধ্যে - মূল স্কোপগুলির চাইল্ড স্কোপ তৈরি করতে পারে - একটি নিয়ামক অগত্যা কেবলমাত্র একটি সুযোগ ধারণ করে না।

আপনি যখন নিজের কৌণিক অ্যাপ্লিকেশনটি চালাচ্ছেন আপনি উত্পন্ন এইচটিএমএলটি দেখেন, আপনি সহজেই দেখতে পাবেন যে কোনও ডোম উপাদানগুলি একটি সুযোগ 'অন্তর্ভুক্ত করে', কারণ অ্যাংুলার কোনও উপাদান প্রয়োগ করা হয়েছে এমন কোনও উপাদানের উপর ক্লাস এনজি-স্কোপ যুক্ত করে (মূল উপাদান সহ) অ্যাপ্লিকেশনটিতে, যার $ রুটস্কোপ রয়েছে)।

যাইহোক, $ স্কোপ এবং $ রুটস্কোপের শুরুতে '$' চিহ্নটি কৌণিক দ্বারা সংরক্ষিত স্টাফের জন্য কেবল কৌণিকের মধ্যে একটি সনাক্তকারী।

নোট করুন যে মডিউল এবং নিয়ন্ত্রণকারীদের মধ্যে পরিবর্তনশীল ইত্যাদি ভাগ করার জন্য $ রুটস্কোপ ব্যবহার করা সাধারণত সেরা অনুশীলন হিসাবে বিবেচিত হয় না। জাভাস্ক্রিপ্ট বিকাশকারীরা সেখানে ভেরিয়েবলগুলি ভাগ করে বিশ্বব্যাপী সুযোগের 'দূষণ' এড়ানোর বিষয়ে কথা বলছেন, যেহেতু পরে একই নামটির একটি ভেরিয়েবল অন্য কোথাও ব্যবহার করা হয় যদি সংঘর্ষ হতে পারে, বিকাশকারী এটি বুঝতে না পেরে যে এটি ইতিমধ্যে $ রুটস্কোপে ঘোষণা করা হয়েছে। অ্যাপ্লিকেশনটির আকার এবং এটির বিকাশকারী দলের সাথে এর গুরুত্ব বৃদ্ধি পায়। আদর্শভাবে $ রুটস্কোপটিতে কেবল ধ্রুবক বা স্থির ভেরিয়েবল থাকবে যা অ্যাপ্লিকেশন জুড়ে সর্বদা সামঞ্জস্যপূর্ণ হওয়ার উদ্দেশ্যে। মডিউল জুড়ে স্টাফ ভাগ করে নেওয়ার আরও ভাল উপায় হ'ল পরিষেবা এবং কারখানাগুলি ব্যবহার করা, যা অন্য একটি বিষয়!


2

উভয় জাভা স্ক্রিপ্ট অবজেক্ট এবং পার্থক্যটি নীচের মত চিত্র দ্বারা চিত্রিত হয়েছে।

এখানে চিত্র বর্ণনা লিখুন

এনটিবি:
প্রথম কৌণিক অ্যাপ্লিকেশনটি কোনও মডেল বা ফাংশনের বৈশিষ্ট্যটি $ স্কোপগুলিতে সন্ধান করার চেষ্টা করে, যদি এটি $ সুযোগের মধ্যে সম্পত্তিটি খুঁজে না পায়, তবে এটি উচ্চ স্তরের স্তরের ক্ষেত্রে প্যারেন্ট স্কোপে অনুসন্ধান করে। সম্পত্তিটি যদি এখনও উপরের শ্রেণিবিন্যাসে না পাওয়া যায় তবে কৌণিকটি $ রুটস্কোপে সমাধান করার চেষ্টা করে।


1

জন পাপের অ্যাঙ্গুলার জেএস স্টাইলগাইডের মতো নতুন স্টাইলগুলি পরামর্শ দিচ্ছে যে আমাদের $scopeবর্তমান পৃষ্ঠার বৈশিষ্ট্যগুলি মোটেও সংরক্ষণ করতে ব্যবহার করা উচিত নয় । পরিবর্তে আমাদের controllerAs with vmদৃষ্টিভঙ্গি নিয়ন্ত্রণকারী বস্তুর সাথে আবদ্ধ যেখানে ব্যবহার করা উচিত । তারপরে কন্ট্রোলারস সিনট্যাক্স ব্যবহার করার জন্য এটির জন্য ক্যাপচার ভেরিয়েবল ব্যবহার করুন। একটি সামঞ্জস্যপূর্ণ পরিবর্তনশীল নাম যেমন vm চয়ন করুন, যা ভিউমোডেলকে বোঝায়।

$scopeযদিও এর দেখার সক্ষমতাগুলির জন্য আপনার এখনও প্রয়োজন হবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.