অ্যাঙ্গুলারজেএস-এ আমি কীভাবে বর্তমান ব্যবহারকারীর প্রসঙ্গ সংরক্ষণ করব?


92

আমার কাছে একটি অ্যাথ সার্ভিস রয়েছে, যা কোনও ব্যবহারকারীর লগ ইন করে, এটি কোনও ব্যবহারকারীর জেসন বস্তুকে ফিরে দেয়। আমি যা করতে চাই তা হ'ল সেই অবজেক্টটি সেট করা হয়েছে এবং পৃষ্ঠাটি রিফ্রেশ না করে অ্যাপ্লিকেশন জুড়ে সমস্ত পরিবর্তন প্রতিবিম্বিত হয়েছে (লগ ইন / লগ আউট অবস্থায় রয়েছে)।

আমি AngularJS এর ​​মাধ্যমে কীভাবে এটি সম্পাদন করব?

উত্তর:


180

এটি সম্পাদন করার সহজতম উপায় হ'ল কোন পরিষেবা ব্যবহার করে। উদাহরণ স্বরূপ:

app.factory( 'AuthService', function() {
  var currentUser;

  return {
    login: function() { ... },
    logout: function() { ... },
    isLoggedIn: function() { ... },
    currentUser: function() { return currentUser; }
    ...
  };
});

এরপরে আপনি আপনার কোনও নিয়ামককে এটি উল্লেখ করতে পারেন। নিম্নলিখিত কোডটি পরিষেবা থেকে একটি মান পরিবর্তনের জন্য লক্ষ্য করে (নির্দিষ্ট ফাংশনটি কল করে) এবং তারপরে পরিবর্তিত মানগুলিকে স্কোপে সিঙ্ক করে।

app.controller( 'MainCtrl', function( $scope, AuthService ) {
  $scope.$watch( AuthService.isLoggedIn, function ( isLoggedIn ) {
    $scope.isLoggedIn = isLoggedIn;
    $scope.currentUser = AuthService.currentUser();
  });
});

এবং তারপরে অবশ্যই আপনি সেই তথ্যটি ব্যবহার করতে পারেন তবে আপনি উপযুক্ত দেখেন; উদাহরণস্বরূপ, টেম্পলেটগুলিতে ইত্যাদি You আপনি আপনার মেনু নিয়ামকগুলিতে এটি পুনরায় (আপনার যা করতে হবে তা কাস্টমাইজড) ইত্যাদি করতে পারেন etc. ইত্যাদি you

আরও নির্দিষ্ট কিছু আপনার প্রয়োগের উপর নির্ভর করে।

আশাকরি এটা সাহায্য করবে!


28
@ ক্রিসনিকোলা আসলে, অ্যাঙ্গুলারজেএস-এ সমস্ত পরিষেবাদি সিঙ্গেলন। সুতরাং পরিষেবাটি যখন অনুরোধ করা হয়েছিল ঠিক তখনই এটি তৈরি করা হয়েছিল (যেমন একটি নিয়ামক বা অন্য কোনও পরিষেবা দ্বারা) এবং এর জন্য পরবর্তী সমস্ত অনুরোধগুলি ঠিক একই উদাহরণটি ফিরে আসে।
জোশ ডেভিড মিলার

4
এটি হতে পারে তবে একটি ফাংশন হিসাবে আমরা কীভাবে সেই তথ্যটিকে জনসাধারণের API এবং ব্যক্তিগত এপিআইতে সঞ্চয় করি তার ইন্টার্নালগুলি সরাতে পারি। এটি পরে রিফ্যাক্টরিংকে আরও সহজ করে তোলে। তবে ফাংশনটি এখনও একটি বুলিয়ান ফিরিয়ে আনবে ।
জোশ ডেভিড মিলার

7
এটি একটি মূর্খ প্রশ্ন হতে পারে ... তবে যদি ব্যবহারকারী পৃষ্ঠাটি সতেজ করে - লগইন তথ্যটি কী হারিয়ে যায়?
টোম্বা

10
@ টোম্বা এটি একটি ভাল প্রশ্ন। :-) প্রকৃতপক্ষে তথ্যটি রিফ্রেশে হারিয়ে গেছে। সাধারণত, আপনি একটি কুকিতে কিছু সেশন তথ্য সংরক্ষণ করতে চান । সেটিংয়ের তথ্যটি সেট আপ করার সময়ও পরীক্ষা করা যায় AuthService। এটি কেবল পৃষ্ঠা রিফ্রেশের জন্যই নয় তবে একটি নতুন ট্যাবে লিঙ্ক খোলার জন্যও সহায়তা করে।
জোশ ডেভিড মিলার

4
@ পিক্সম্যাচ আপনি শেখার বক্ররেখা সম্পর্কে 100% সঠিক আপনার প্রশ্নটি নির্দিষ্ট কিছু ক্ষেত্রে নির্ভর করবে, তবে এখানে কিছু সাধারণ নিদর্শন রয়েছে। উদ্বেগের পৃথকীকরণ রাখুন: লগইন শুরুর সাথে সম্পর্কিত ইউআই লেখক থেকে পৃথক, যা লেখকের রাজ্য থেকে পৃথক, যা কোনও অবস্থাতেই মেনু থেকে পৃথক যে বর্ণিত অবস্থার উপর নির্ভর করতে পারে। ন্যাভ / মেনু প্রায়শই একক নিয়ামক দ্বারা পরিচালনা করা হয়, এবং নেস্টেড স্টেটস (একটি লা ui-router) এবং রুট সলভগুলি অ্যাথথ নিয়ন্ত্রণগুলি ডিআরওয়াই রাখার একটি ভাল উপায়। আপনি যা লিখেছেন তা সঠিক সম্পর্কে শোনাচ্ছে।
জোশ ডেভিড মিলার

5

আমি জোশের ভাল প্রতিক্রিয়াটি সংশোধন করে এটিকে যুক্ত করে বলব যে, যেহেতু একটি এথ সার্ভিস সাধারণত কারও আগ্রহের বিষয় (বলা যাক, কেউ লগইন না করলে লগইন ভিউ অদৃশ্য হওয়া উচিত), সম্ভবত একটি সহজ বিকল্প আগ্রহী পক্ষগুলিকে অবহিত করা $rootScope.$broadcast('loginStatusChanged', isLoggedIn);(1 ) (2), আগ্রহী পক্ষগুলি (যেমন নিয়ন্ত্রক) ব্যবহার শুনবে $scope.$on('loginStatusChanged', function (event, isLoggedIn) { $scope.isLoggedIn = isLoggedIn; }

(1) $rootScopeপরিষেবার আর্গুমেন্ট হিসাবে ইনজেকশন করা হচ্ছে

(২) মনে রাখবেন যে, অ্যাসিনক্রোনাস লগইন অপারেশনের সম্ভাব্য ক্ষেত্রে, আপনি অ্যাংুলারকে অবহিত করতে চান যে সম্প্রচারটি কোনও $rootScope.$apply()ফাংশনে অন্তর্ভুক্ত করে বিষয়গুলিকে পরিবর্তন করবে ।

এখন, প্রতিটি / অনেকগুলি নিয়ামকের মধ্যে ব্যবহারকারীর প্রসঙ্গটি রাখার কথা বলতে গেলে আপনি তাদের প্রত্যেকের জন্য লগইন পরিবর্তনের জন্য শুনে খুশী না হতে পারেন এবং কেবল শীর্ষস্থানীয় লগইন নিয়ামককে শুনতে পছন্দ করতে পারেন, তারপরে অন্যান্য লগইন-সচেতন নিয়ন্ত্রণকারীদের বাচ্চা হিসাবে যুক্ত করে / এটির এম্বেড করা নিয়ন্ত্রণকারীরা। এইভাবে, বাচ্চাদের নিয়ন্ত্রক উত্তরাধিকারসূত্রে প্রাপ্ত পিতা-মাতার $ স্কোপ বৈশিষ্ট্যগুলি যেমন আপনার ব্যবহারকারীর প্রসঙ্গে দেখতে সক্ষম হবেন।


4
কারখানার ফাংশনটির ভুল ব্যাখ্যার জন্য ডাউনভোটেড। আপনি আপনার উত্তর পোস্ট করার কয়েক মাস আগে এই মন্তব্যটিতে ইতিমধ্যে এই ভুল বোঝাবুঝির সমাধান করা হয়েছিল ।
রাইস ভ্যান ডার ওয়েয়ারডেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.