অ্যাঙ্গুলারজেএস-এ কোনও পরিষেবার সম্পত্তিতে কীভাবে বাঁধতে হয় তার সেরা অনুশীলনের সন্ধান করছি।
অ্যাঙ্গুলারজেএস ব্যবহার করে তৈরি করা পরিষেবার মধ্যে কীভাবে বৈশিষ্ট্যগুলিতে আবদ্ধ থাকা যায় তা বুঝতে আমি একাধিক উদাহরণের মাধ্যমে কাজ করেছি।
নীচে আমার কাছে কীভাবে কোনও পরিষেবায় সম্পত্তি যুক্ত করতে হয় তার দুটি উদাহরণ রয়েছে; তারা উভয় কাজ. প্রথম উদাহরণটি বুনিয়াদি বাইন্ডিং ব্যবহার করে এবং দ্বিতীয় উদাহরণটি $ স্কোপ $ ব্যবহার করে এবং পরিষেবার বৈশিষ্ট্যগুলিতে আবদ্ধ থাকতে দেখুন
কোনও পরিষেবাতে সম্পত্তি বাঁধার সময় এই উদাহরণগুলির মধ্যে দুটিকেই কী পছন্দ করা হয় বা অন্য কোনও বিকল্প রয়েছে যা সম্পর্কে আমি সচেতন নই বা প্রস্তাবিত হবে?
এই উদাহরণগুলির ভিত্তিটি হ'ল পরিষেবাটি প্রতি 5 সেকেন্ডে তার "বৈশিষ্ট্যগুলি সর্বশেষ আপডেট" এবং "কল" আপডেট করে। একবার পরিষেবা বৈশিষ্ট্য আপডেট হয়ে গেলে ভিউতে এই পরিবর্তনগুলি প্রতিফলিত করা উচিত। এই দুটি উদাহরণই সফলভাবে কাজ করে; আমি আরও অবাক হই যে এটি করার আরও ভাল উপায় আছে কিনা।
বেসিক বাঁধাই
নিম্নলিখিত কোডটি এখানে দেখতে এবং চালানো যেতে পারে: http://plnkr.co/edit/d3c16z
<html>
<body ng-app="ServiceNotification" >
<div ng-controller="TimerCtrl1" style="border-style:dotted">
TimerCtrl1 <br/>
Last Updated: {{timerData.lastUpdated}}<br/>
Last Updated: {{timerData.calls}}<br/>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>
<script type="text/javascript">
var app = angular.module("ServiceNotification", []);
function TimerCtrl1($scope, Timer) {
$scope.timerData = Timer.data;
};
app.factory("Timer", function ($timeout) {
var data = { lastUpdated: new Date(), calls: 0 };
var updateTimer = function () {
data.lastUpdated = new Date();
data.calls += 1;
console.log("updateTimer: " + data.lastUpdated);
$timeout(updateTimer, 5000);
};
updateTimer();
return {
data: data
};
});
</script>
</body>
</html>
আমি অন্য যেভাবে পরিষেবা বৈশিষ্ট্যের সাথে বাধ্যতামূলক সমাধান করেছি তা হ'ল $ সুযোগ। নিয়ামকটি দেখুন।
$ সুযোগ। $ ঘড়ি
নিম্নলিখিত কোডটি এখানে দেখতে এবং চালানো যেতে পারে: http://plnkr.co/edit/dSBlC9
<html>
<body ng-app="ServiceNotification">
<div style="border-style:dotted" ng-controller="TimerCtrl1">
TimerCtrl1<br/>
Last Updated: {{lastUpdated}}<br/>
Last Updated: {{calls}}<br/>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>
<script type="text/javascript">
var app = angular.module("ServiceNotification", []);
function TimerCtrl1($scope, Timer) {
$scope.$watch(function () { return Timer.data.lastUpdated; },
function (value) {
console.log("In $watch - lastUpdated:" + value);
$scope.lastUpdated = value;
}
);
$scope.$watch(function () { return Timer.data.calls; },
function (value) {
console.log("In $watch - calls:" + value);
$scope.calls = value;
}
);
};
app.factory("Timer", function ($timeout) {
var data = { lastUpdated: new Date(), calls: 0 };
var updateTimer = function () {
data.lastUpdated = new Date();
data.calls += 1;
console.log("updateTimer: " + data.lastUpdated);
$timeout(updateTimer, 5000);
};
updateTimer();
return {
data: data
};
});
</script>
</body>
</html>
আমি সচেতন যে আমি $ রুটস্কোপ। The পরিষেবাতে সম্প্রচার করতে এবং নিয়ামকটিতে $ মূল $ ব্যবহার করতে পারি, তবে অন্য যে উদাহরণগুলিতে আমি প্রথম সম্প্রচারে $ সম্প্রচার / use ব্যবহারটি তৈরি করেছি তা ক্যাপচার নয় নিয়ামক, তবে অতিরিক্ত সম্প্রচারিত কলগুলি নিয়ামকটিতে ট্রিগার করা হয়। আপনি যদি $ রুটস্কোপ $ সম্প্রচার সমস্যা সমাধানের কোনও উপায় সম্পর্কে অবগত হন তবে দয়া করে একটি উত্তর সরবরাহ করুন।
তবে আমি আগে যা উল্লেখ করেছি তা পুনরায় সেট করতে আমি কোনও পরিষেবার বৈশিষ্ট্যগুলিতে কীভাবে আবদ্ধ থাকতে পারি তার সেরা অনুশীলনটি জানতে চাই।
হালনাগাদ
এই প্রশ্নটি প্রাথমিকভাবে এপ্রিল 2013 এ জিজ্ঞাসা করা হয়েছিল এবং উত্তর দেওয়া হয়েছিল 2014 2014 সালের মে মাসে, গিল বিরমন একটি নতুন উত্তর সরবরাহ করেছিল, যা আমি সঠিক উত্তর হিসাবে পরিবর্তন করেছি। যেহেতু গিল বীরমানের উত্তরের খুব কম ভোট রয়েছে, তাই আমার উদ্বেগ হ'ল এই প্রশ্নটি পড়ার লোকেরা আরও উত্তর দিয়ে অন্য উত্তরের পক্ষে তার উত্তরটিকে অগ্রাহ্য করবে। সেরা উত্তরটি কী তা নিয়ে সিদ্ধান্ত নেওয়ার আগে, আমি গিল বীরমানের উত্তরটির জন্য সুপারিশ করি।