আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমি সম্প্রতি এটি করার জন্য বিকল্পগুলির দিকে চেয়ে ছিলাম, তাই আমি ভেবেছিলাম যে এটি আমার কারও পক্ষে কার্যকর হলে আমার অনুসন্ধানগুলি এখানে রেখেছি।
বেশিরভাগ ক্ষেত্রে, যদি ইউআই এর স্থিতি বা অ্যাপ্লিকেশনটির অভ্যন্তরীণ কাজের সাথে যোগাযোগের জন্য বাহ্যিক উত্তরাধিকারের কোডের প্রয়োজন হয় তবে এই পরিষেবাগুলি পরিবর্তনগুলি বিমোচন করতে কোনও পরিষেবা কার্যকর হতে পারে। যদি কোনও বাহ্যিক কোড আপনার কৌনিক নিয়ামক, উপাদান বা নির্দেশের সাথে সরাসরি যোগাযোগ করে তবে আপনি আপনার লিগ্যাসি কোডের সাথে আপনার অ্যাপ্লিকেশনটিকে ভারীভাবে সংযুক্ত করছেন যা খারাপ খবর।
আমি আমার ক্ষেত্রে যা ব্যবহার করে শেষ করেছি তা হ'ল ব্রাউজার অ্যাক্সেসযোগ্য গ্লোবালগুলির (যেমন উইন্ডো) এবং ইভেন্ট হ্যান্ডলিংয়ের সংমিশ্রণ। আমার কোডটিতে একটি স্মার্ট ফর্ম জেনারেশন ইঞ্জিন রয়েছে যার ফর্মগুলি প্রারম্ভিক করার জন্য একটি সিএমএস থেকে জেএসএন আউটপুট প্রয়োজন। আমি যা করেছি তা এখানে:
function FormSchemaService(DOM) {
var conf = DOM.conf;
// This event is the point of integration from Legacy Code
DOM.addEventListener('register-schema', function (e) {
registerSchema(DOM.conf);
}, false);
// service logic continues ....
প্রত্যাশা অনুযায়ী কৌনিক ইনজেক্টর ব্যবহার করে ফর্ম স্কিমা পরিষেবা তৈরি করা হয়েছে:
angular.module('myApp.services').
service('FormSchemaService', ['$window' , FormSchemaService ])
এবং আমার নিয়ন্ত্রকদের মধ্যে: ফাংশন () strict 'কঠোর ব্যবহার';
angular.module('myApp').controller('MyController', MyController);
MyEncapsulatorController.$inject = ['$scope', 'FormSchemaService'];
function MyController($scope, formSchemaService) {
// using the already configured formSchemaService
formSchemaService.buildForm();
এখন পর্যন্ত এটি খাঁটি কৌণিক এবং জাভাস্ক্রিপ্ট পরিষেবা ভিত্তিক প্রোগ্রামিং। তবে উত্তরাধিকারের একীকরণ এখানে আসে:
<script type="text/javascript">
(function(app){
var conf = app.conf = {
'fields': {
'field1: { // field configuration }
}
} ;
app.dispatchEvent(new Event('register-schema'));
})(window);
</script>
স্পষ্টতই প্রতিটি পদ্ধতিরই এর যোগ্যতা এবং ত্রুটি রয়েছে। এই পদ্ধতির সুবিধা এবং ব্যবহার আপনার ইউআইয়ের উপর নির্ভর করে। পূর্বে প্রস্তাবিত পদ্ধতিগুলি আমার ক্ষেত্রে কার্যকর হয় না কারণ আমার ফর্ম স্কিমা এবং উত্তরাধিকার কোডের কৌণিক স্কোপের কোনও নিয়ন্ত্রণ এবং জ্ঞান নেই। তাই আমাদের অ্যাপ্লিকেশনটির উপর ভিত্তি করে কনফিগার করা angular.element('element-X').scope();
যদি আমরা চারপাশে স্কোপগুলি পরিবর্তন করি তবে সম্ভাব্যভাবে অ্যাপ্লিকেশনটি ভেঙে দিতে পারে। তবে যদি আপনার অ্যাপ্লিকেশনটির স্কোপিংয়ের জ্ঞান থাকে এবং এটি প্রায়শই পরিবর্তিত হয় না তার উপর নির্ভর করতে পারেন, যা পূর্বে প্রস্তাবিত হয়েছিল তা একটি व्यवहार্য পন্থা।
আশাকরি এটা সাহায্য করবে. যে কোনও প্রতিক্রিয়াও স্বাগত।
var injector = angular.injector(['ng', 'MyApp']);
। এটি করা আপনাকে সম্পূর্ণ নতুন প্রসঙ্গ এবং একটি সদৃশ দেবেmyService
। এর অর্থ আপনি পরিষেবা এবং মডেলের দুটি উদাহরণ দিয়ে শেষ করবেন এবং ভুল জায়গায় ডেটা যুক্ত করবেন। পরিবর্তে আপনি অ্যাপ্লিকেশন মধ্যে ব্যবহার করে একটি উপাদান লক্ষ্য করা উচিতangular.element('#ng-app').injector(['ng', 'MyApp'])
। এই মুহুর্তে আপনি পরে মডেল পরিবর্তনগুলি মোড়ানো করতে প্রয়োগ করতে পারেন $