" অ্যাঙ্গুলারজেএস নিয়ন্ত্রণকারীগুলিতে কীভাবে this
এবং $scope
কাজ করে ?"
সংক্ষিপ্ত উত্তর :
this
- যখন কন্ট্রোলার কনস্ট্রাক্টর ফাংশন বলা হয়, তখন
this
তা নিয়ামক হয়।
- যখন কোনও
$scope
বস্তুতে সংজ্ঞায়িত কোনও ফাংশন বলা হয়, this
তখন "ফাংশনটি যখন ডাকা হত তখন কার্যকরভাবে সুযোগ" হয়। এটি (বা নাও হতে পারে) $scope
ফাংশনটি সংজ্ঞায়িত করা হতে পারে। সুতরাং, ফাংশন ভিতরে, this
এবং $scope
পারে না একই হতে।
$scope
- প্রতিটি নিয়ামকের একটি যুক্ত
$scope
বস্তু থাকে।
- একটি নিয়ামক (কনস্ট্রাক্টর) ফাংশন সম্পর্কিত সম্পর্কিত মডেল বৈশিষ্ট্য এবং ফাংশন / আচরণ সেট করার জন্য দায়ী
$scope
।
- এই
$scope
বিষয়বস্তুতে (এবং প্যারেন্ট স্কোপ অবজেক্টস, যদি প্রোটোটাইপিকাল উত্তরাধিকার খেলায় থাকে) কেবলমাত্র এইচটিএমএল / ভিউ থেকে অ্যাক্সেসযোগ্য methods যেমন, থেকে ng-click
, ফিল্টার ইত্যাদি
দীর্ঘ উত্তর :
একটি নিয়ামক ফাংশন একটি জাভাস্ক্রিপ্ট কনস্ট্রাক্টর ফাংশন। যখন কনস্ট্রাক্টর ফাংশন কার্যকর করে (উদাহরণস্বরূপ, যখন একটি ভিউ লোড হয়), this
(যেমন, "ফাংশন প্রসঙ্গ") নিয়ামক অবজেক্টে সেট করা থাকে। সুতরাং "ট্যাবগুলি" কন্ট্রোলার কনস্ট্রাক্টর ফাংশনে, যখন অ্যাডপেন ফাংশন তৈরি হয়
this.addPane = function(pane) { ... }
এটি কন্ট্রোলার অবজেক্টে তৈরি করা হয়েছে, স্কোপ-এ নয়। দর্শনগুলি অ্যাডপেন ফাংশনটি দেখতে পারে না - কেবলমাত্র $ স্কোপে সংজ্ঞায়িত ফাংশনগুলিতে তাদের অ্যাক্সেস রয়েছে। অন্য কথায়, এইচটিএমএলে, এটি কাজ করবে না:
<a ng-click="addPane(newPane)">won't work</a>
"ট্যাবস" নিয়ন্ত্রক কনস্ট্রাক্টর ফাংশন কার্যকর করার পরে, আমাদের নিম্নলিখিতগুলি রয়েছে:
ড্যাশ কালো রেখা প্রটোটাইপ ইনহেরিটেন্স ইঙ্গিত - একটি বিছিন্ন সুযোগ prototypically থেকে উত্তরাধিকারী ব্যাপ্তি । (এটি এইচটিএমএলে যে নির্দেশনার মুখোমুখি হয়েছিল তার প্রভাব থেকে প্রোটোটাইপিকভাবে উত্তরাধিকার সূত্রে আসে না))
এখন, ফলকের নির্দেশকের লিঙ্ক ফাংশনটি ট্যাব নির্দেশের সাথে যোগাযোগ করতে চায় (যার সত্যিকার অর্থে এটি কোনও উপায়ে ট্যাবগুলি বিচ্ছিন্নভাবে স্কোপকে প্রভাবিত করতে হবে)। ইভেন্টগুলি ব্যবহার করা যেতে পারে, তবে অন্য একটি প্রক্রিয়াটি হ'ল require
ট্যাবগুলি নিয়ন্ত্রকের ফলকটির নির্দেশ । ( require
ট্যাবগুলি $ সুযোগের দিকে ফলকের নির্দেশের কোনও ব্যবস্থা নেই বলে মনে হয় ))
সুতরাং, এটি প্রশ্নটি জাগায়: যদি আমাদের কেবলমাত্র ট্যাবস নিয়ন্ত্রকের অ্যাক্সেস থাকে তবে আমরা কীভাবে ট্যাবগুলিকে বিচ্ছিন্নভাবে $ স্কোপগুলিতে অ্যাক্সেস পাই (যা আমরা সত্যই চাই?)
ভাল, লাল বিন্দু লাইন উত্তর। অ্যাডপেন () ফাংশনটির "স্কোপ" (আমি এখানে জাভাস্ক্রিপ্টের ফাংশন স্কোপ / ক্লোজারগুলি উল্লেখ করছি) ট্যাবগুলিকে বিচ্ছিন্ন $ স্কোপটিতে অ্যাক্সেস দেয়। উদাহরণস্বরূপ, অ্যাডপেন () অ্যাডপেন () সংজ্ঞায়িত করার সময় তৈরি হওয়া একটি ক্লোজারের কারণে উপরের চিত্রের "ট্যাবস আইসোলেটসকোপ" এ অ্যাক্সেস রয়েছে। (যদি আমরা পরিবর্তে ট্যাব $ স্কোপ অবজেক্টে অ্যাডপেন () সংজ্ঞায়িত করি তবে ফলক নির্দেশিকাটির এই ফাংশনে অ্যাক্সেস থাকবে না এবং তাই এটি ট্যাবস-স্কোপের সাথে যোগাযোগ করার কোনও উপায় থাকবে না))
আপনার প্রশ্নের অন্য অংশের উত্তর দিতে how does $scope work in controllers?
:
$ সুযোগে সংজ্ঞায়িত ফাংশনগুলির মধ্যে, this
"সুযোগটি কার্যকর হয় যেখানে / যখন ফাংশনটি ডাকা হত"। ধরুন আমাদের নিম্নলিখিত HTML রয়েছে:
<div ng-controller="ParentCtrl">
<a ng-click="logThisAndScope()">log "this" and $scope</a> - parent scope
<div ng-controller="ChildCtrl">
<a ng-click="logThisAndScope()">log "this" and $scope</a> - child scope
</div>
</div>
এবং ParentCtrl
(নিঃসঙ্গ) আছে
$scope.logThisAndScope = function() {
console.log(this, $scope)
}
প্রথম লিঙ্কটি ক্লিক করা এটি দেখায় this
এবং $scope
তা একই রকম হয়, যেহেতু " ফাংশনটি যখন ডাকা হত তখন কার্যকারণের সুযোগ" এর সাথে যুক্ত স্কোপ ParentCtrl
।
দ্বিতীয় লিঙ্কে ক্লিক করা হলে প্রকাশ করবে this
এবং $scope
হয় না একই, যেহেতু " কার্যকরী সুযোগ যখন ফাংশন বলা হয় " সঙ্গে যুক্ত সুযোগ ChildCtrl
। তাই এখানে, this
সেট করা হয় ChildCtrl
এর $scope
। পদ্ধতির অভ্যন্তরে, $scope
এখনও ParentCtrl
এর। সুযোগ।
বেহালা
আমি this
$ স্কোপে সংজ্ঞায়িত কোনও ফাংশনের অভ্যন্তরটি ব্যবহার না করার চেষ্টা করি , কারণ এটি বিভ্রান্তিকর হয়ে ওঠে যার ফলে $ স্কোপটি প্রভাবিত হচ্ছে, বিশেষত এনজি-রিপিট, এনজি-অন্তর্ভুক্ত, এনজি-সুইচ এবং নির্দেশনাগুলি সকলেই তাদের নিজস্ব স্কোপগুলি তৈরি করতে পারে considering