নেস্টেড নির্দেশাবলীর মধ্যে যোগাযোগ


61

নির্দেশাবলীর মধ্যে যোগাযোগের বেশ কয়েকটি উপায় রয়েছে বলে মনে হয়। বলুন আপনার নেস্টেড নির্দেশিকা রয়েছে, যেখানে অভ্যন্তরীণ নির্দেশাবলীর অবশ্যই বাইরের সাথে কিছু যোগাযোগ করতে হবে (উদাহরণস্বরূপ এটি ব্যবহারকারী পছন্দ করেছেন)।

<outer>
  <inner></inner>
  <inner></inner>
</outer>

এখনও পর্যন্ত আমার এটি করার 5 টি উপায় রয়েছে

require: পিতামাতাদের নির্দেশ

innerডিরেক্টিভের প্রয়োজন হতে পারে outerনির্দেশক, যা তার নিয়ামক উপর কিছু পদ্ধতি প্রকাশ করতে পারে। সুতরাং innerসংজ্ঞা

require: '^outer',
link: function(scope, iElement, iAttrs, outerController) {
   // This can be passed to ng-click in the template
   $scope.chosen = function() {
     outerController.chosen(something);
   }
}

এবং outerনির্দেশকের নিয়ামকটিতে:

controller: function($scope) {
   this.chosen = function(something) {
   }
}

$emit ঘটনা

innerনির্দেশ করতে পারেন $emitএমন একটি ইভেন্টের, যা outerনির্দেশ কে উত্তর দিতে পারেন মাধ্যমে $on। সুতরাং innerনির্দেশকের নিয়ামক:

controller: function($scope) {
  $scope.chosen = function() {
    $scope.$emit('inner::chosen', something);
  }
}

এবং outerনির্দেশাবলী নিয়ন্ত্রণে:

controller: function($scope) {
  $scope.$on('inner::chosen, function(e, data) {
  }
}

মাধ্যমে প্যারেন্ট স্কোপে এক্সপ্রেশন কার্যকর করুন &

আইটেমটি প্যারেন্ট স্কোপের একটি অভিব্যক্তিতে আবদ্ধ হতে পারে এবং এটি একটি উপযুক্ত সময়ে কার্যকর করতে পারে ute এইচটিএমএল এর মত হবে:

<outer>
  <inner inner-choose="functionOnOuter(item)"></inner>
  <inner inner-choose="functionOnOuter(item)"></inner>
</outer>

সুতরাং innerকন্ট্রোলারের একটি 'ইনারচুজ' ফাংশন রয়েছে এটি কল করতে পারে

scope: {
  'innerChoose': '&'
},
controller: function() {
  $scope.click = function() {
    $scope.innerChoose({item:something});
  }
}

যা এই ক্ষেত্রে outerনির্দেশের সুযোগে 'ফাংশন আউটআউটর' ফাংশনটি কল করবে :

controller: function($scope) {
  $scope.functionOnOuter = function(item) {
  }
}

বিচ্ছিন্ন সুযোগে সুযোগের উত্তরাধিকার

এই নেস্টেড কন্ট্রোলার হিসাবে প্রদত্ত, স্কোপ উত্তরাধিকার কাজ করতে পারে এবং অভ্যন্তরীণ নির্দেশিকা কেবল স্কোপ চেইনে যে কোনও ফাংশন কল করতে পারে, যতক্ষণ না এর কোনও বিচ্ছিন্ন সুযোগ নেই scope সুতরাং innerনির্দেশনায়:

// scope: anything but a hash {}
controller: function() {
  $scope.click = function() {
    $scope.functionOnOuter(something);
  }
}

এবং outerনির্দেশে:

controller: function($scope) {
  $scope.functionOnOuter = function(item) {
  }
}

পরিষেবা দ্বারা অভ্যন্তরীণ এবং বাইরের উভয় মধ্যে ইনজেকশনের

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

প্রশ্ন : অন্যগুলির তুলনায় প্রত্যেকের কোনও সম্ভাব্য ত্রুটি এবং সুবিধা কী কী?


5
আমি বিশ্বাস করতে পারি না আমি এই প্রশ্নটি আগে দেখিনি। আপনার দেওয়া সমস্ত অপশনকে আমি কৃতজ্ঞ। আপনি যদি ইতিমধ্যে এটি না করে থাকেন, আপনি কি এই প্রশ্নটি স্ট্যাকওভারফ্লোতে পোস্ট করার কথা ভাবেন? আমি আশা করব যে এটি স্ট্যাকওভারফ্লোতে আরও অনেক সন্ধান পাবে।
মাইক বারলো - বারদেভ

উত্তর:


7

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


1

আমার মতামত:

পরিষেবাদিগুলি মডিউল / নির্দেশিকা / নিয়ন্ত্রণকারীগুলিতে আচরণ / ডেটা ভাগ করার পছন্দের উপায়। দিকনির্দেশকগুলি বিচ্ছিন্ন জিনিস যা বাসা বাঁধতে পারে বা না পারে। কন্ট্রোলারদের যতটা সম্ভব ভিউ মডেল হওয়ার জন্য দৃ to় থাকতে হবে, আদর্শভাবে কোনও ব্যবসার যুক্তি সেখানেই শেষ করা উচিত নয়।

তাই:

আপনি যখন প্যারেন্ট স্কোপ ফাংশনগুলিতে অ্যাক্সেসের মাধ্যমে তাদের একসাথে ওয়্যারিং শুরু করেন তখন আমার মনে হয় আপনি তাদের পক্ষে খুব শক্তভাবে মিলিত হওয়া এবং পুরো অ্যাপ্লিকেশনটিকে অপঠনযোগ্য এবং উপাদানগুলি পুনরায় ব্যবহারযোগ্য না করার ঝুঁকিপূর্ণ করছেন। আপনি যখন কোনও পরিষেবায় সেই ভাগ করা ডেটা বা আচরণটি ডিকুয়াল করেন তখন আপনার বিভিন্ন ডেটা / আচরণের সাথে সম্পূর্ণ নির্দেশকে পুনরায় ব্যবহার করার এমনকি সুবিধাটি রান-টাইমে ব্যবহার করার জন্য পরিষেবাটি নির্ধারণ করে benefit নির্ভরতা ইনজেকশন সম্পর্কে কি হয়।

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