একটি AngularJS পরিষেবা থেকে বর্তমান সুযোগ পাস




data-binding angularjs-scope (3)

এটি একটি AngularJS পরিষেবা থেকে "বর্তমান" $scope পাস সঠিক?

আমি এমন অবস্থানে আছি যেখানে আমার কাছে কেবলমাত্র এক কন্ট্রোলারের দ্বারা ক্ষয়প্রাপ্ত একটি $ পরিষেবা আছে এবং আমি $ পরিষেবা পদ্ধতিতে নিয়ামক এর সুযোগের বিষয়ে একটি রেফারেন্স চাই।

এই দার্শনিক সঠিক?

অথবা আমি $ rootScope এ ইভেন্টগুলি সম্প্রচার করতে এবং তারপরে আমার নিয়ামককে তাদের শোনাতে চাই?


আমি আপনাকে বলব যে আপনার কার্যকারিতা শুধুমাত্র একটি কন্ট্রোলারের জন্য নির্দিষ্ট তবে আপনাকে কোনও পরিষেবা প্রয়োজন হবে না।

কন্ট্রোলারের কাজগুলি নির্দিষ্ট মডেলটিকে ম্যানিপুলেট করতে হয় তবে একটি পরিষেবা বিশ্বব্যাপী কাজগুলির সাথে মোকাবিলা করতে হয়। আমি পরিবর্তে জিনিস মিশ্রিত করার পরিবর্তে এই প্রতিচ্ছবি স্টিক হবে।

এই ডক্স কি বলে

সেবা

কৌণিক পরিষেবা ওয়েব অ্যাপ্লিকেশনের জন্য সাধারণ কাজগুলি বহন করে singletons হয়

নিয়ামক

কৌণিক ইন, একটি নিয়ামক একটি জাভাস্ক্রিপ্ট ফাংশন (টাইপ / ক্লাস) যা রুট সুযোগ ব্যতীত, কৌণিক সুযোগের দৃষ্টান্ত বৃদ্ধি করতে ব্যবহৃত হয়।

PS: এর থেকেও যদি আপনি হজম করতে চান তবে আপনি আপনার পরিষেবার মধ্যে $ rootScopeও ইনজেক্ট করতে পারেন।


আমি ব্যক্তিগতভাবে বিশ্বাস করি যে একটি পরিষেবাতে $scope পাস $scope একটি খারাপ ধারণা , কারণ এটি একটি প্রকারের বৃত্তাকার রেফারেন্স তৈরি করে: নিয়ামকটি পরিষেবা এবং পরিষেবাটির উপর নির্ভর করে নিয়ন্ত্রকের সুযোগের উপর নির্ভর করে।

সম্পর্কের পরিপ্রেক্ষিতে বিভ্রান্তির উপরে, এগুলির মতো জিনিসগুলি আবর্জনা সংগ্রহকারীর পথে পৌঁছাতে পারে।

আমার পছন্দের পদ্ধতিটি কন্ট্রোলার স্কোকে একটি ডোমেন অবজেক্টটি স্থাপন করা এবং পরিষেবাতে পাস করা। এই ভাবে পরিষেবা নির্বিশেষে একটি নিয়ামক ভিতরে বা ভবিষ্যতে অন্য পরিষেবা ভিতরে ব্যবহার করা হয় কিনা নির্বিশেষে কাজ করে।

উদাহরণস্বরূপ, যদি পরিষেবাকে ধাক্কা এবং অ্যারের errors থেকে উপাদানগুলি পপ করা হয় তবে আমার কোডটি হবে:

var errors = [];
$scope.errors = errors;
$scope.myService = new MyService(errors);

পরিষেবাটি errors উপর অপারেটিংয়ের মাধ্যমে নিয়ন্ত্রককে তখন ইন্টারঅ্যাক্ট করে। অবশ্যই আমি পুরো অ্যারে রেফারেন্সটি মুছে ফেলার বিষয়ে সতর্ক হতে হবে না, কিন্তু সেই দিন শেষে যা সাধারণ জেনারেলের উদ্বেগের বিষয়।

আমি ব্রডকাস্টিং, $apply এবং / অথবা অনুরূপ জিনিসগুলি ব্যবহার করতে চাই না, কারণ ইমহো ভাল ওও-অনুশীলনগুলি সবসময় যেকোনো কৌণিক-ম্যাজিকগুলিকে তিরস্কার করবে।


হ্যাঁ। আপনি যখন এটি আরম্ভ করেন তখন আপনি পরিষেবার মধ্যে $ সুযোগটি পাস করতে পারেন। সার্ভিস কন্সট্রাক্টর এ আপনি এটিকে __স্কোপের মতো সুযোগটি নির্দিষ্ট করতে পারেন এবং তারপরে পরিষেবাটির মধ্যে সুযোগটি উল্লেখ করতে পারেন!

angular.module('blah').controller('BlahCtrl', function($scope, BlahService) {

    $scope.someVar = 4;

    $scope.blahService = new blahService($scope);

});

angular.module('blah').factory('blahService', function() {

    //constructor
    function blahService(scope) {
        this._scope = scope;

        this._someFunction()
    }

    //wherever you'd reference the scope
    blahService.prototype._someFunction = function() {

        this._scope['someVar'] = 5;

    }

    return blahService;

});




angular-services