এই প্রশ্নটি পুরানো তবে আমি দীর্ঘদিন ধরে এই সমস্যাটির উত্তর পাওয়ার চেষ্টা করেছি যা আমার প্রয়োজনের জন্য কাজ করবে এবং সহজে এটি খুঁজে পেল না। আমি বিশ্বাস করি যে আমার নিম্নলিখিত সমাধানটি বর্তমানে গৃহীত একের চেয়ে অনেক ভাল, সম্ভবত কারণ এই প্রশ্নটি মূলত উত্থাপিত হওয়ার পরে কৌণিক কার্যকারিতা যুক্ত করেছে।
সংক্ষিপ্ত উত্তর, মডিউল.ভ্যালু পদ্ধতিটি ব্যবহার করে আপনি একটি নিয়ামক কনস্ট্রাক্টরে ডেটা পাস করতে পারবেন।
এখানে আমার উত্সাহ দেখুন
আমি একটি মডেল অবজেক্ট তৈরি করি, তারপরে এটিকে মডিউলটির নিয়ামকের সাথে যুক্ত করে, এটি 'মডেল' নামের সাথে উল্লেখ করে
এইচটিএমএল / জেএস
<html>
<head>
<script>
var model = {"id": 1, "name":"foo"};
$(document).ready(function(){
var module = angular.module('myApp', []);
module.value('model', model);
module.controller('MyController', ['model', MyController]);
angular.bootstrap(document, ['myApp']);
});
function confirmModelEdited() {
alert("model name: " + model.name + "\nmodel id: " + model.id);
}
</script>
</head>
<body >
<div ng-controller="MyController as controller">
id: {{controller.model.id}} <br>
name: <input ng-model="controller.model.name"/>{{controller.model.name}}
<br><button ng-click="controller.incrementId()">increment ID</button>
<br><button onclick="confirmModelEdited()">confirm model was edited</button>
</div>
</body>
</html>
আমার কন্ট্রোলারে কনস্ট্রাক্টর তারপরে সেই একই সনাক্তকারী 'মডেল' দিয়ে একটি প্যারামিটার গ্রহণ করে যা এর পরে এটি অ্যাক্সেস করতে পারে।
নিয়ামক
function MyController (model) {
this.model = model;
}
MyController.prototype.incrementId = function() {
this.model.id = this.model.id + 1;
}
মন্তব্য:
আমি বুটস্ট্র্যাপিংয়ের ম্যানুয়াল ইনিশিয়ালাইজেশন ব্যবহার করছি , যা আমার মডেলটি কৌণিক পাঠানোর আগে আমাকে আরম্ভ করার অনুমতি দেয় ize এটি বিদ্যমান কোডের সাথে আরও দুর্দান্তভাবে খেলবে কারণ আপনি আপনার প্রাসঙ্গিক ডেটা সেট আপ করার জন্য অপেক্ষা করতে পারেন এবং যখন আপনি চান তখন কেবলমাত্র আপনার অ্যাপ্লিকেশনটির কৌনিক সাবসেটটি সংকলন করতে পারেন।
প্লাঙ্কারটিতে আমি মডেল অবজেক্টের মানগুলিকে সতর্ক করতে একটি বোতাম যুক্ত করেছি যা প্রাথমিকভাবে জাভাস্ক্রিপ্টে সংজ্ঞায়িত হয়েছিল এবং কৌণিকের কাছে গিয়েছিল, কেবল এটি নিশ্চিত করতে যে কৌণিকটি সত্যই মডেল অবজেক্টটি রেফারেন্স করছে, বরং এটি অনুলিপি করা এবং অনুলিপি সহ কাজ করা।
এই লাইনে:
module.controller('MyController', ['model', MyController]);
আমি মাইকন্ট্রোলার বস্তুকে মডিউল.কন্ট্রোলার ফাংশনে পাস করছি, ফাংশন ইনলাইন হিসাবে ঘোষণার চেয়ে। আমি মনে করি এটি আমাদের কন্ট্রোলার অবজেক্টকে আরও স্পষ্টভাবে সংজ্ঞায়িত করতে দেয় তবে কৌণিক ডকুমেন্টেশন এটিকে ইনলাইন করতে থাকে তাই আমি ভেবেছিলাম এটির স্পষ্টতা রয়েছে।
আমি "নিয়ামক হিসাবে" সিনট্যাক্স ব্যবহার করছি এবং "$ স্কোপ" ভেরিয়েবল ব্যবহার না করে মাইকন্ট্রোলারের "এই" বৈশিষ্ট্যে মান নির্ধারণ করছি। আমি বিশ্বাস করি এটি ঠিক যেমন-স্কোপ ব্যবহার করে ঠিকঠাক কাজ করবে, নিয়ামক কার্যভারটি এর পরে এর মতো কিছু দেখাবে:
module.controller('MyController', ['$scope', 'model', MyController]);
এবং নিয়ামক নির্মাণকারী এর মত স্বাক্ষর থাকতে পারে:
function MyController ($scope, model) {
আপনি যে কারণেই চেয়েছিলেন, যদি আপনি এই মডেলটিকে দ্বিতীয় মডিউলটির মান হিসাবে সংযুক্ত করতে পারেন, তবে এটি আপনার প্রাথমিক মডিউলের উপর নির্ভরতা হিসাবে সংযুক্ত করে।
আমি বিশ্বাস করি যে তার সমাধান বর্তমানে গৃহীত একের চেয়ে অনেক ভাল কারণ কারণ
- নিয়ামকের কাছে দেওয়া মডেলটি আসলে একটি জাভাস্ক্রিপ্ট অবজেক্ট, মূল্যায়ন করার মতো স্ট্রিং নয়। এটি বস্তুর সত্যিকারের রেফারেন্স এবং এতে পরিবর্তনগুলি এই মডেল অবজেক্টের অন্যান্য রেফারেন্সগুলিকে প্রভাবিত করে।
- কৌণিক বলেছে যে এনজি-থ্রি-র গ্রহণযোগ্য উত্তরের ব্যবহার একটি অপব্যবহার, যা এই সমাধানটি করে না।
অ্যাংুলার যেভাবে দেখা গেছে অন্যান্য বেশিরভাগ উদাহরণগুলিতে কাজ করার জন্য দেখে মনে হচ্ছে নিয়ামকটি মডেলটির ডেটা সংজ্ঞায়িত করে যা আমার কাছে কখনই বোধগম্য হয়নি, মডেল এবং নিয়ামকের মধ্যে কোনও বিচ্ছেদ নেই, যা সত্যই মনে হয় না like আমার কাছে এমভিসি। এই সমাধানটি আপনাকে সত্যিকার অর্থে একটি সম্পূর্ণ পৃথক মডেল অবজেক্ট রাখতে দেয় যা আপনি নিয়ামকের কাছে যান। এছাড়াও লক্ষণীয়, আপনি যদি এনজি-অন্তর্ভুক্ত নির্দেশিকা ব্যবহার করেন তবে আপনি আপনার সমস্ত কৌণিক এইচটিএমএল একটি পৃথক ফাইলে রাখতে পারবেন, আপনার মডেল ভিউ এবং নিয়ামককে পৃথক মডুলার টুকরোতে সম্পূর্ণ পৃথক করে।