কিভাবে আমি কনসোল থেকে AngularJS পরিষেবা পরীক্ষা করতে পারি?




angularjs-service (3)

আমার মত একটি সেবা আছে:

angular.module('app').factory('ExampleService', function(){
  this.f1 = function(world){
    return 'Hello '+world;
  }
  return this;
})

আমি জাভাস্ক্রিপ্ট কনসোল থেকে এটি পরীক্ষা করতে চাই এবং ফাংশন f1() এর পরিষেবাটি কল করতে চাই।

আমি এটা কিভাবে করবো?


টিএলডিআর: এক লাইনে আপনি যে কমান্ডটি খুঁজছেন:

angular.element(document.body).injector().get('serviceName')

গভীর ডুব

AngularJS নির্ভরতা ইনজেকশন (ডিআই) ব্যবহার করে আপনার উপাদান, নির্দেশাবলী এবং অন্যান্য পরিষেবাদিতে পরিষেবা / কারখানাগুলিকে ইনজেকশন দেয় । সুতরাং আপনাকে পরিষেবা পেতে কি করতে হবে তা হল AngularJS এর ​​ইনজেক্টর (ইনজেক্টরটি সমস্ত নির্ভরতাগুলিকে তারের উপর নির্ভর করে এবং উপাদানগুলিতে সরবরাহ করার জন্য দায়ী)।

আপনার অ্যাপ্লিকেশনের ইনজেক্টরটি পেতে আপনাকে এটি এমন উপাদান থেকে দখল করতে হবে যা কৌণিক পরিচালনা করছে। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশন শরীরের উপাদান নিবন্ধিত হয় তবে আপনি injector = angular.element(document.body).injector()

পুনরুদ্ধারকৃত injector আপনি injector get injector.get('ServiceName') পছন্দ করেন সেটি পেতে পারেন।

এই উত্তরটি সম্পর্কে আরো তথ্য: কৌণিক থেকে ইনজেক্টর পুনরুদ্ধার করা যাবে না
এমনকি আরও এখানে: উত্তরাধিকার কোড থেকে AngularJS কল করুন

একটি নির্দিষ্ট উপাদান $scope পেতে অন্য দরকারী কৌশল। আপনার বিকাশকারী সরঞ্জামগুলির DOM পরিদর্শন সরঞ্জামের সাথে উপাদান নির্বাচন করুন এবং তারপরে নিম্নলিখিত লাইনটি চালান ( $0 সর্বদা নির্বাচিত উপাদান):
angular.element($0).scope()


@ জাস্টগসচা এর উত্তর স্পট আছে, কিন্তু যখন আমি অ্যাক্সেস চাই তখন এটি টাইপ করতে অনেক কিছু, তাই আমি এটি আমার app.js. এর নীচে যুক্ত করেছি। তারপর আমার টাইপ করতে হবে x = getSrv('$http') http পরিষেবা পেতে।

// @if DEBUG
function getSrv(name, element) {
    element = element || '*[ng-app]';
    return angular.element(element).injector().get(name);
}
// @endif

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


সর্বোপরি, আপনার পরিষেবার একটি সংশোধিত সংস্করণ।

একটি)

var app = angular.module('app',[]);

app.factory('ExampleService',function(){
    return {
        f1 : function(world){
            return 'Hello' + world;
        }
    };
});

এটি একটি বস্তু ফেরত, এখানে নতুন কিছুই।

এখন কনসোল থেকে এটি পেতে উপায়

খ)

var $inj = angular.injector(['app']);
var serv = $inj.get('ExampleService');
serv.f1("World");

গ)

আপনি আগে যা করছেন সেগুলির মধ্যে একটি হল এটি অনুমান করা যে app.factory আপনাকে ফাংশনটি বা এটির একটি নতুন সংস্করণ প্রদান করে। কোন ঘটনা না। একটি কনস্ট্রাকটর পেতে যাতে আপনি করতে হবে

app.factory('ExampleService',function(){
        return function(){
            this.f1 = function(world){
                return 'Hello' + world;
            }
        };
    });

এটি একটি উদাহরণ সার্ভার কনস্ট্রাক্টর প্রদান করে যা আপনাকে পরবর্তীতে 'নতুন' করতে হবে।

অথবা বিকল্পভাবে,

app.service('ExampleService',function(){
            this.f1 = function(world){
                return 'Hello' + world;
            };
    });

এটি ইনজেকশনতে নতুন উদাহরণস্বরূপ () প্রদান করে।







angularjs-service