কেন আমরা AngularJS এ "রুটস্কোপ।" ব্যবহার করি?


109

অ্যাঙ্গুলারজেএস-এর জন্য কিছু প্রাথমিক তথ্য সন্ধান করার চেষ্টা করা হয়েছিল $rootScope.$broadcast, তবে অ্যাঙ্গুলারজেএস ডকুমেন্টেশন খুব বেশি সহায়তা করে না। সহজ কথায় আমরা কেন এটি ব্যবহার করব?

এছাড়াও, জন পপির হট তোয়ালে টেম্পলেটটির অভ্যন্তরে সাধারণ মডিউলটিতে একটি কাস্টম ফাংশন রয়েছে $broadcast:

function $broadcast() {
    return $rootScope.$broadcast.apply($rootScope, arguments);
}

আমি বুঝতে পারছিলাম না এটি কী করছে? সুতরাং এখানে কয়েকটি প্রাথমিক প্রশ্ন রয়েছে:

1) কি করে $rootScope.$broadcast?

2) $rootScope.$broadcastএবং এর মধ্যে পার্থক্য কী $rootScope.$broadcast.apply?




$rootScope.$broadcast.apply()ব্যবহৃত হয় কারণ আপনি যদি বিশেষ argumentsকোনও জিনিস অন্য কোনও ফাংশনে পাস করতে চান তবে আপনাকে ব্যবহার করতে হবে apply()(এর বিপরীতে call())। প্রয়োগের ক্ষেত্রে এমডিএন পৃষ্ঠায় @ ব্ল্যাকহোলের লিঙ্কটি ছাড়াও, আপনি এন্ট্রিটিও দেখতে পারেন arguments
স্কট শোপবাচ

উত্তর:


97
  1. কি করে $rootScope.$broadcast?

    $rootScope.$broadcastঅ্যাপ্লিকেশন সুযোগ মাধ্যমে একটি ইভেন্ট প্রেরণ করা হয়। যে অ্যাপ্লিকেশন কোন সন্তান সুযোগ একটি সহজ ব্যবহার করে এটি ধরতে পারে: $scope.$on()

    আপনি যখন সরাসরি কোনও পিতা-মাতার নয় এমন একটি স্কোপে পৌঁছাতে চান তখন ইভেন্টগুলি প্রেরণে বিশেষভাবে কার্যকর হয় (উদাহরণস্বরূপ পিতামাতার একটি শাখা)

    !!! তবে একটি জিনিস নিয়ন্ত্রকের কাছ থেকে ব্যবহার করা নয়$rootScope.$on$rootScopeঅ্যাপ্লিকেশনটি হ'ল, যখন আপনার নিয়ামকটি ধ্বংস হয়ে যায় তখন ইভেন্ট শ্রোতা এখনও উপস্থিত থাকবে এবং যখন আপনার নিয়ামকটি আবার তৈরি হবে তখন এটি আরও ইভেন্ট শ্রোতাদের স্তুপ করে দেবে। (সুতরাং একটি সম্প্রচার একাধিকবার ধরা পড়বে)। $scope.$on()পরিবর্তে ব্যবহার করুন, এবং শ্রোতাও ধ্বংস হয়ে যাবে।

  2. $rootScope.$broadcast& এর মধ্যে পার্থক্য কী $rootScope.$broadcast.apply?

    কখনও কখনও আপনাকে ব্যবহার করতে হয় apply(), বিশেষত যখন নির্দেশাবলী এবং অন্যান্য জেএস গ্রন্থাগারগুলির সাথে কাজ করে। তবে যেহেতু আমি সেই কোড বেসটি জানি না, তাই এখানে যদি এটি হয় তবে আমি তা বলতে পারব না।


11
$rootScope.$onস্মৃতি ফুটোয় দুর্দান্ত গ্রেট । এটি গ্রহণযোগ্য উত্তরের ক্ষেত্রেও প্রযোজ্য, কারণ নিয়ন্ত্রকরা সম্ভবত hiEventServiceতিনি তৈরি করেছেন call
অ্যাডামডপোর্ট

উদাহরণস্বরূপ আপনি যেখানে $broadcastবনাম ব্যবহার করবেন$broadcast.apply()
অতিথি

$ রুটস্কোপ $ $ সম্প্রচারটি সমস্ত শ্রোতার কাছে ইভেন্ট পাঠায়, কেবলমাত্র শিশুদের স্কোপ থেকে শ্রোতাদের কাছে নয়। $ সুযোগ। $ সম্প্রচারটি ইভেন্টের স্কোপগুলিতে সীমাবদ্ধ করে
গের্ট বেলম্যানস

157

$rootScope মূলত ইভেন্ট শ্রোতা এবং প্রেরণকারী হিসাবে কাজ করে।

এটি কীভাবে ব্যবহৃত হয় তার প্রশ্নের উত্তর দেওয়ার জন্য, এটি একত্রে ব্যবহৃত হয় rootScope.$on;

$rootScope.$broadcast("hi");

$rootScope.$on("hi", function(){
    //do something
});

তবে $rootScopeআপনার নিজের অ্যাপ্লিকেশনটির সাধারণ ইভেন্ট পরিষেবা হিসাবে ব্যবহার করা খারাপ অভ্যাস , যেহেতু আপনি দ্রুত এমন একটি পরিস্থিতিতে পৌঁছে যাবেন যেখানে প্রতিটি অ্যাপ্লিকেশন $ রুটস্কোপের উপর নির্ভর করে এবং আপনি কী জানেন যে উপাদানগুলি কী ইভেন্টগুলি শুনছে।

সর্বোত্তম অনুশীলন হ'ল আপনি যে কাস্টম ইভেন্টটি শুনতে বা সম্প্রচার করতে চান তার জন্য পরিষেবা তৈরি করা।

.service("hiEventService",function($rootScope) {
    this.broadcast = function() {$rootScope.$broadcast("hi")}
    this.listen = function(callback) {$rootScope.$on("hi",callback)}
})

4
ধন্যবাদ @itcouldevenbeabout এই লাইনটি কি বৈশ্বিক $ রুটস্কোপে কোনও ইভেন্ট সংযুক্ত করার একই যুক্তি বলছে না? ফাংশন () {$ রুটস্কোপ। $ সম্প্রচার ("হাই")}, যা আপনি উল্লেখ করেছেন একটি খারাপ অভ্যাস?
Nexus23

11
সম্প্রচার করতে কোনও পরিষেবা ব্যবহার করা এবং শ্রোতাদের একটি নির্দিষ্ট ইভেন্টের জন্য সংযুক্ত করার জন্য এমন পরিস্থিতি এড়ানো যায় যেখানে আপনি নিশ্চিত না যে কে শুনছে। এটি
কীসের

4
সবেমাত্র mit নির্গমন এবং $ সম্প্রচারের মধ্যে পার্থক্যটি আবিষ্কার করে, আমি বলতে চাই যে ইভেন্টটি নির্গমন করা ভাল you যেভাবে আপনি ইভেন্টটিকে ক্ষুদ্রতম স্কোপের সংক্ষিপ্ত আকারে দূষক করছেন, (আদর্শভাবে পরিষেবাটি হবে এটির নিজস্ব সুযোগ, তবে আমি মনে করি এটি সম্ভব নয়?)
ব্রোন্ডাহল

3
-1। আমি দেখছি না, কোনও পরিষেবাতে বিচ্ছিন্নতা কীভাবে কেবল সম্প্রচারের চেয়ে ভাল। যাইহোক, পরিষেবাতে নিজের নিজস্ব সুযোগ আরও ভাল ব্যবহার করুন। এবং আরও ভাল ব্যবহার $ নির্গমণ, এবং $ সম্প্রচার নয়। এছাড়াও আপনার প্রস্তাবিত পরিষেবা ইভেন্ট আর্গুমেন্ট সমর্থন করে না। সবচেয়ে খারাপ এটি কি সাবস্ক্রিপশন সমর্থন করে না; $ রুটস্কোপের জন্য মারাত্মক পাপ।
আলফা-মাউস

3
সাবস্ক্রিপশনের অভাব আমার এই উত্তরটিকে নষ্ট করে দেয়। আপনি যদি hiEventService.listen(callback)কোনও নিয়ামকের কাছ থেকে কল করেন তবে নিয়ামকটি ধ্বংস হয়ে যাওয়ার পরেও শ্রোতার অস্তিত্ব থাকবে। মেমরি লিক! কন্ট্রোলার স্কোপ বাইন্ডিং $scope.$on("hi",callback)অটোমেটিক ক্লিনআপ সহ।
অ্যাডামডপোর্ট

32

$ রুটস্কোপ $ $ সম্প্রচার হ'ল "বৈশ্বিক" ইভেন্ট উত্থাপনের একটি সুবিধাজনক উপায় যা সমস্ত শিশু স্কোপ শুনতে পারে। আপনাকে কেবল $rootScopeবার্তাটি সম্প্রচার করতে ব্যবহার করতে হবে, যেহেতু সমস্ত বংশধরেরা এর জন্য শুনতে পারে।

মূল স্কোপটি ইভেন্টটি সম্প্রচার করে:

$rootScope.$broadcast("myEvent");

যে কোনও শিশু স্কোপটি ইভেন্টটির জন্য শুনতে পারে:

$scope.$on("myEvent",function () {console.log('my event occurred');} );

কেন আমরা "রুটস্কোপ।" সম্প্রচার করি? $watchভেরিয়েবলের পরিবর্তনগুলি শোনার জন্য এবং ভেরিয়েবলের অবস্থার পরিবর্তন হলে ফাংশন সম্পাদন করতে আপনি ব্যবহার করতে পারেন। যাইহোক, কিছু ক্ষেত্রে, আপনি কেবল এমন একটি ইভেন্ট বাড়াতে চান যা অ্যাপ্লিকেশনের অন্যান্য অংশগুলি স্কোপ ভেরিয়েবলের ক্ষেত্রে কোনও পরিবর্তন বিবেচনা না করেই শুনতে পারে। এটি যখন $broadcastসহায়ক হয়।


19

পাসিং ডেটা !!!

আমি অবাক হয়েছি কেন কেউ কেন এমন কোনও $broadcastপরামিতি গ্রহণ করার কথা উল্লেখ করেনি যেখানে আপনি কলব্যাক ফাংশন ব্যবহার করে Objectযে কোনও পাস করতে পারবেন$on

উদাহরণ:

// the object to transfert
var myObject = {
    status : 10
}

$rootScope.$broadcast('status_updated', myObject);
$scope.$on('status_updated', function(event, obj){
    console.log(obj.status); // 10
})

8

$ RootScope। $ সম্প্রচারটি কী করে?

এটি সমস্ত কৌণিক অ্যাপ্লিকেশনটিতে সংশ্লিষ্ট শ্রোতাদের কাছে বার্তাটি সম্প্রচারিত করে, বিভিন্ন শ্রেণিবদ্ধ স্তরের বার্তাটি স্কোপে স্থানান্তরিত করার একটি অত্যন্ত শক্তিশালী উপায় (এটি পিতামাতা, শিশু বা ভাইবোন)

একইভাবে, আমাদের $ rootScope। Mit নির্গত হয়, কেবলমাত্র পার্থক্যটি হ'ল প্রাক্তনটি $ সুযোগ $ দ্বারাও ধরা পড়ে while যখন পরবর্তীটি কেবল $ rootScope $ দ্বারা ধরা হয়।

উদাহরণের জন্য পড়ুন: - http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/

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