যদি আপনার উদ্দেশ্যটি ইতিমধ্যে অন্য কোনও উপাদানটির ইনস্ট্যান্টিয়েটেড নিয়ন্ত্রককে ধরে রাখা এবং আপনি যদি উপাদান / নির্দেশ ভিত্তিক পদ্ধতির অনুসরণ করেন তবে আপনি সর্বদা require
একটি নির্দিষ্ট স্তরক্রম অনুসরণকারী অন্য উপাদান থেকে নিয়ামক (কোনও উপাদান উদাহরণ) করতে পারেন ।
উদাহরণ স্বরূপ:
myModule.component('wizardContainer', {
...,
controller : function WizardController() {
this.disableNext = function() {
}
},
...
});
myModule.component('onboardingStep', {
...,
controller : function OnboadingStepController(){
this.$onInit = function() {
}
this.onChange = function(val) {
if(notIsValid(val)){
this.container.disableNext();
}
}
},
...,
require : {
container: '^^wizardContainer'
},
...
});
এখন উপরোক্ত উপাদানগুলির ব্যবহারের কিছু হতে পারে:
<wizard-container ....>
...
<on-boarding-step ...>
</on-boarding-step>
...
</wizard-container>
অনেক উপায়ে আপনি সেট আপ করতে পারেন হয় প্রয়োজন ।
(উপসর্গ নেই) - বর্তমান উপাদানটিতে প্রয়োজনীয় নিয়ামক সন্ধান করুন। যদি পাওয়া না যায় তবে একটি ত্রুটি নিক্ষেপ করুন।
? - প্রয়োজনীয় নিয়ামকটি সনাক্ত করার চেষ্টা করুন বা পাওয়া না গেলে লিঙ্কটি fn এ নাল পাস করুন।
। - উপাদান এবং এর পিতামাতার অনুসন্ধান করে প্রয়োজনীয় নিয়ামক সন্ধান করুন। যদি পাওয়া না যায় তবে একটি ত্রুটি নিক্ষেপ করুন।
^^ - উপাদানটির পিতামাতাকে অনুসন্ধান করে প্রয়োজনীয় নিয়ামক সন্ধান করুন। যদি পাওয়া না যায় তবে একটি ত্রুটি নিক্ষেপ করুন।
? ^ - উপাদান এবং তার পিতামাতাদের অনুসন্ধান করে প্রয়োজনীয় নিয়ামকটি সনাক্ত করার চেষ্টা করুন বা যদি খুঁজে পাওয়া না যায় তবে লিংকটিতে নাল পাস করুন।
? ^^ - উপাদানটির পিতামাতার অনুসন্ধান করে প্রয়োজনীয় নিয়ামকটি সনাক্ত করার চেষ্টা করুন বা খুঁজে পাওয়া না গেলে লিঙ্কটি নাল পাস করুন।
পুরানো উত্তর:
$controller
অন্য নিয়ামকের ভিতরে কোনও নিয়ামক ইনস্ট্যান্ট করতে আপনাকে পরিষেবা ইনজেক্ট করতে হবে। তবে সচেতন থাকুন যা এর ফলে কিছু নকশার সমস্যা হতে পারে। আপনি সর্বদা পুনরায় ব্যবহারযোগ্য পরিষেবাগুলি তৈরি করতে পারেন যা একক দায়িত্ব অনুসরণ করে এবং আপনার প্রয়োজনমতো কন্ট্রোলারে ইনজেক্ট করে।
উদাহরণ:
app.controller('TestCtrl2', ['$scope', '$controller', function ($scope, $controller) {
var testCtrl1ViewModel = $scope.$new();
$controller('TestCtrl1',{$scope : testCtrl1ViewModel });
testCtrl1ViewModel.myMethod();
}]);
যে কোনও ক্ষেত্রে আপনি কল করতে পারবেন না TestCtrl1.myMethod()
কারণ আপনি পদ্ধতিটি সংযোজনকারী হিসাবে রেখেছেন $scope
এবং না control
আপনি যদি নিয়ামকটি ভাগ করে নিচ্ছেন তবে সর্বদা এটি করা ভাল -
.controller('TestCtrl1', ['$log', function ($log) {
this.myMethod = function () {
$log.debug("TestCtrl1 - myMethod");
}
}]);
এবং গ্রাস করার সময়:
.controller('TestCtrl2', ['$scope', '$controller', function ($scope, $controller) {
var testCtrl1ViewModel = $controller('TestCtrl1');
testCtrl1ViewModel.myMethod();
}]);
প্রথম ক্ষেত্রে সত্যই $scope
আপনার ভিউ মডেল, এবং দ্বিতীয় ক্ষেত্রে এটি নিয়ামক উদাহরণ নিজেই।
TestCtrl1
পরিবর্তে আপনার কোনও পরিষেবাতে পরিবর্তন করা উচিত ।