এটি করার সর্বোত্তম উপায়টি কী তা খুঁজে বের করার জন্য আমি কিছুটা সময় নিয়েছি। পুরানো পৃষ্ঠায় ফিরে যাওয়ার জন্য যখন ব্যবহারকারী পৃষ্ঠাটি ছেড়ে দেয় এবং তারপরে পিছনে বোতাম টিপত তখন আমি এই রাজ্যটি রাখতে চাইতাম; এবং আমার সমস্ত ডেটা কেবল রুটস্কোপে রাখে না ।
চূড়ান্ত ফলাফলটি প্রতিটি নিয়ামকের জন্য একটি পরিষেবা থাকে । কন্ট্রোলারে, আপনার কেবলমাত্র ফাংশন এবং ভেরিয়েবল রয়েছে যা আপনি পরিষ্কার করেন না সেগুলি সম্পর্কে আপনার যত্ন নেওয়া উচিত।
নিয়ামকের জন্য পরিষেবা নির্ভরতা ইনজেকশন দ্বারা ইনজেকশনের হয়। পরিষেবাগুলি সিলেটলেট হিসাবে, তাদের ডেটা নিয়ন্ত্রণকারীর ডেটার মতো ধ্বংস হয় না।
পরিষেবাটিতে, আমার একটি মডেল রয়েছে। মডেলটির কেবলমাত্র ডেটা রয়েছে - কোনও ফাংশন নেই -। এটি চালিয়ে যাওয়ার জন্য এটিকে JSON থেকে পিছনে পিছনে রূপান্তর করা যায়। অধ্যবসায়ের জন্য আমি এইচটিএমএল 5 লোকালস্টোর ব্যবহার করেছি।
সবশেষে আমি ব্যবহার করেছি window.onbeforeunloadএবং $rootScope.$broadcast('saveState');সমস্ত পরিষেবাগুলিকে জানাতে পারি যে তাদের রাজ্যটি সংরক্ষণ করা উচিত এবং $rootScope.$broadcast('restoreState')তাদের রাষ্ট্রটি পুনরুদ্ধার করতে জানাতে (যখন ব্যবহারকারী পৃষ্ঠাটি ছেড়ে যায় এবং পৃষ্ঠায় যথাক্রমে ফিরে আসার জন্য পিছনে বোতাম টিপেন তখন ব্যবহৃত হয়)।
আমার ব্যবহারকারীর নিয়ন্ত্রণকারীর জন্য ব্যবহারকারীর পরিষেবা নামক পরিষেবা :
app.factory('userService', ['$rootScope', function ($rootScope) {
var service = {
model: {
name: '',
email: ''
},
SaveState: function () {
sessionStorage.userService = angular.toJson(service.model);
},
RestoreState: function () {
service.model = angular.fromJson(sessionStorage.userService);
}
}
$rootScope.$on("savestate", service.SaveState);
$rootScope.$on("restorestate", service.RestoreState);
return service;
}]);
ইউজারকন্ট্রোলার উদাহরণ
function userCtrl($scope, userService) {
$scope.user = userService;
}
এরপরে দৃশ্যটি এইভাবে বাঁধাই করে
<h1>{{user.model.name}}</h1>
আর এ অ্যাপ্লিকেশন মডিউল , রান ফাংশন মধ্যে আমি হ্যান্ডেল সম্প্রচার এর saveState এবং restoreState
$rootScope.$on("$routeChangeStart", function (event, next, current) {
if (sessionStorage.restorestate == "true") {
$rootScope.$broadcast('restorestate'); //let everything know we need to restore state
sessionStorage.restorestate = false;
}
});
//let everthing know that we need to save state now.
window.onbeforeunload = function (event) {
$rootScope.$broadcast('savestate');
};
আমি যেমন উল্লেখ করেছি এই মুহুর্তে আসতে কিছুটা সময় নিয়েছে। এটি করার একটি খুব পরিষ্কার উপায়, তবে কৌণিক বিকাশকালে এমন কিছু করা আমার পক্ষে সন্দেহজনক যে প্রকৌশল কিছুটা সাধারণ বিষয়।
আমি আরও সহজ দেখতে চাই, তবে ব্যবহারকারীরা পৃষ্ঠাটি ছেড়ে যায় এবং ফিরে আসে সহ কন্ট্রোলারদের ধরে রাখার রাষ্ট্র পরিচালনা করার পরিষ্কার উপায় হিসাবে।
sessionStorage.restoreStateসেট করা আছে তা দেখায় না"true"। পৃষ্ঠাটি সতেজ হয়ে উঠলে ডেটা ধরে রাখার সঠিক সমাধানের জন্য, এখানে দেখুন । রুট পরিবর্তিত হলে অবিরাম ডেটা বজায় রাখার জন্য কার্লোসকার্কামোর উত্তরটি দেখুন। আপনার যা দরকার তা হ'ল ডেটা কোনও পরিষেবাতে রাখা।