angularjs - tutorial - react js




সেবা বনাম কারখানা সম্পর্কে বিভ্রান্ত (15)

লাইভ উদাহরণ

"হ্যালো ওয়ার্ল্ড" উদাহরণ

factory / service / provider :

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

//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
    this.sayHello = function() {
        return "Hello, World!"
    };
});

//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
    return {
        sayHello: function() {
            return "Hello, World!"
        }
    };
});

//provider style, full blown, configurable version     
myApp.provider('helloWorld', function() {
    // In the provider function, you cannot inject any
    // service or factory. This can only be done at the
    // "$get" method.

    this.name = 'Default';

    this.$get = function() {
        var name = this.name;
        return {
            sayHello: function() {
                return "Hello, " + name + "!"
            }
        }
    };

    this.setName = function(name) {
        this.name = name;
    };
});

//hey, we can configure a provider!            
myApp.config(function(helloWorldProvider){
    helloWorldProvider.setName('World');
});


function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {

    $scope.hellos = [
        helloWorld.sayHello(),
        helloWorldFromFactory.sayHello(),
        helloWorldFromService.sayHello()];
}​

যেহেতু আমি এটি বুঝতে পারি, যখন একটি ফ্যাক্টরির ভিতরে আমি একটি অবজেক্ট ফিরিয়ে আনতে যা নিয়ামক হিসাবে ইনজেকশন পায়। একটি সেবা ভিতরে যখন আমি this ব্যবহার করে বস্তুর সাথে ডিল করছি এবং কিছু ফিরে না।

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

উদাহরণ কোড প্রদর্শন করা:

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

factories.factory('User', function () {
  return {
    first: 'John',
    last: 'Doe'
  };
});

app.controller('ACtrl', function($scope, User) {
  $scope.user = User;
});

app.controller('BCtrl', function($scope, User) {
  $scope.user = User;
});

user.firstACtrl user.first পরিবর্তন করার সময় এটি ব্যবহারকারীকে সক্রিয় করে। user.firstBCtrl পরিবর্তিত হয়, যেমন User একটি সিঙ্গল্টন?

আমার ধারনা ছিল একটি কারখানার সাথে একটি নিয়ামক ইনজেকশন একটি নতুন দৃষ্টান্ত?


AngularJS পরিষেবা বনাম কারখানার

module.service( 'serviceName', function );

module.factory( 'factoryName', function );

injectable যুক্তি হিসাবে serviceName ঘোষণা করার সময় আপনাকে ফাংশনের একটি উদাহরণ সরবরাহ করা হবে। অন্য কথায় নতুন FunctionYouPassedToService() । এই অবজেক্টের উদাহরণটি পরিষেবা বস্তু হয়ে যায় যা AngularJS নিবন্ধন করে এবং প্রয়োজনে পরে অন্য services / controllers ইনজেক্ট করে।

factoryName একটি injectable যুক্তি হিসাবে ঘোষণা করার module.factory আপনাকে module.factory প্রেরিত ফাংশন রেফারেন্সটি module.factory প্রদান করা module.factory

নিচের উদাহরণে আমরা দুটি ভিন্ন উপায়ে MyService সংজ্ঞায়িত MyService । কিভাবে। Service আমরা এই this.methodname ব্যবহার করে সেবা পদ্ধতি তৈরি। ইন ফ্যাক্টরী আমরা একটি কারখানা বস্তু তৈরি এবং এটি পদ্ধতি নির্ধারিত।

AngularJS। সেবা

module.service('MyService', function() {
    this.method1 = function() {
            //..
        }

    this.method2 = function() {
            //..
        }
});

AngularJS। ফ্যাক্টরী

module.factory('MyService', function() {

    var factory = {}; 

    factory.method1 = function() {
            //..
        }

    factory.method2 = function() {
            //..
        }

    return factory;
});

আমরা এই ধরনের একটি সেবা সংজ্ঞায়িত করতে পারেন:

app.service('MyService', function () {
   this.sayHello = function () {
      console.log('hello');
   };
});

.service() আমাদের মডিউলে একটি পদ্ধতি যা একটি নাম এবং একটি ফাংশন নেয় যা পরিষেবাটিকে সংজ্ঞায়িত করে। অনেকটাই অকপট. একবার সংজ্ঞায়িত করা হলে, আমরা অন্যান্য উপাদানগুলিতে যেমন নির্দিষ্ট কন্ট্রোলার, নির্দেশনা এবং ফিল্টারগুলি ব্যবহার করে, সেটি ইনজেক্ট এবং ব্যবহার করতে পারি:

এখন কারখানা হিসাবে একই জিনিস:

app.factory('MyService', function () {
    return {
       sayHello: function () {
           console.log('hello');
       }
    }
});

আবার .factory() আমাদের মডিউলে একটি পদ্ধতি এবং এটি একটি নাম এবং একটি ফাংশনও নেয় যা কারখানাটিকে সংজ্ঞায়িত করে। আমরা ইঞ্জেক্ট এবং সেটি ব্যবহার করতে পারি ঠিক একই ভাবে আমরা পরিষেবাটি দিয়েছি। এখন এখানে পার্থক্য কি?

আচ্ছা, আপনি দেখতে পারেন যে কারখানার সাথে কাজ করার পরিবর্তে আমরা একটি বস্তু আক্ষরিক অর্থ ফেরত দিচ্ছি। কেন যে? এটি সক্রিয়, একটি পরিষেবা একটি কন্সট্রাকটর ফাংশন, যখন একটি কারখানা হয় না। এই কৌণিক বিশ্বের কোথাও গভীর ভিতরে, এই কোডটি যেটি তখন কনটেন্টার ফাংশনটির সাথে Object.create () কে কল করে, যখন এটি তাত্ক্ষণিক হয়। যাইহোক, একটি কারখানা ফাংশন সত্যিই একটি ফাংশন যা বলা হয়, তাই আমরা স্পষ্টভাবে একটি বস্তু ফিরে আছে।


আমার জন্য উদ্ঘাটন ঘটে যখন আমি বুঝতে পারি যে তারা সবাই একইভাবে কাজ করে: একবার কিছু চালানোর মাধ্যমে, তারা যে মানটি সঞ্চয় করে সেটি সঞ্চয় করে, এবং তারপর নির্ভরযোগ্য ইনজেকশন দ্বারা রেফারেন্স করা হলে একই সংরক্ষণ করা মানটিকে কাশি করে।

বলুন আমরা আছে:

app.factory('a', fn);
app.service('b', fn);
app.provider('c', fn);

তিনটি মধ্যে পার্থক্য হল যে:

  1. a এর সংরক্ষিত মান fn চলমান থেকে আসে, অন্য কথায়: fn()
  2. b এর সঞ্চিত মান new আইএনএন থেকে আসে, অন্য কথায়: new fn()
  3. c এর সঞ্চিত মানটি প্রথমে new ing fn দ্বারা একটি উদাহরণ পেয়ে আসে এবং তারপরে ইনস্ট্যান্সের একটি $get পদ্ধতি চালায়

যার অর্থ, কৌণিকের ভিতরে একটি ক্যাশে বস্তুর মতো কিছু আছে, যার প্রতিটি ইনজেকশনটির মান শুধুমাত্র একবার দেওয়া হয়, যখন তাদের প্রথমবার ইনজেকশন দেওয়া হয় এবং কোথায়:

cache.a = fn()
cache.b = new fn()
cache.c = (new fn()).$get()

এই কারণে আমরা this পরিষেবাগুলি ব্যবহার করি এবং এটি একটি সংজ্ঞায়িত করি this.$get প্রদানকারীদের মধ্যে this.$get

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


এখানে আরও কয়েকটি উদাহরণস্বরূপ পরিষেবাগুলির কারখানাগুলি রয়েছে যা তাদের মধ্যে পার্থক্য দেখতে উপকারী হতে পারে। মূলত, একটি সেবা আছে "নতুন ..." এটি ইতিমধ্যে তাত্ক্ষণিক হয়। একটি কারখানা স্বয়ংক্রিয়ভাবে তাত্ক্ষণিক হয় না।

মৌলিক উদাহরণ

একটি বর্গ বস্তু যা একটি একক পদ্ধতি ফিরে

এখানে একটি পরিষেবা রয়েছে যা একটি একক পদ্ধতি রয়েছে:

angular.service('Hello', function () {
  this.sayHello = function () { /* ... */ };
});

এখানে এমন একটি কারখানা রয়েছে যা একটি পদ্ধতির সাথে একটি বস্তু প্রদান করে:

angular.factory('ClassFactory', function () {
  return {
    sayHello: function () { /* ... */ }
  };
});

একটি মান ফেরত

একটি কারখানা যা সংখ্যার তালিকা প্রদান করে:

angular.factory('NumberListFactory', function () {
  return [1, 2, 3, 4, 5];
});

console.log(NumberListFactory);

একটি তালিকা যা সংখ্যাগুলির একটি তালিকা প্রদান করে:

angular.service('NumberLister', function () {
  this.numbers = [1, 2, 3, 4, 5];
});

console.log(NumberLister.numbers);

উভয় ক্ষেত্রে আউটপুট একই, সংখ্যা তালিকা।

উন্নত উদাহরণ

কারখানা ব্যবহার করে "ক্লাস" ভেরিয়েবল

এই উদাহরণে আমরা একটি কাউন্টার ফ্যাক্টরী সংজ্ঞায়িত করি, এটি একটি কাউন্টার বৃদ্ধি বা হ্রাস করে এবং আপনি বর্তমান গণনা পেতে পারেন বা কতগুলি কাউন্টার ফ্যাক্টরি অবজেক্ট তৈরি করা হয়েছে তা পেতে পারেন:

angular.factory('CounterFactory', function () {
  var number_of_counter_factories = 0; // class variable

  return function () {
    var count = 0; // instance variable
    number_of_counter_factories += 1; // increment the class variable

    // this method accesses the class variable
    this.getNumberOfCounterFactories = function () {
      return number_of_counter_factories;
    };

    this.inc = function () {
      count += 1;
    };
    this.dec = function () {
      count -= 1;
    };
    this.getCount = function () {
      return count;
    };
  }

})

আমরা একাধিক কাউন্টার তৈরি করতে কাউন্টার CounterFactory ব্যবহার করি। কত সংখ্যক কাউন্টার তৈরি হয়েছে তা দেখতে আমরা ক্লাস পরিবর্তনশীল অ্যাক্সেস করতে পারি:

var people_counter;
var places_counter;

people_counter = new CounterFactory();
console.log('people', people_counter.getCount());
people_counter.inc();
console.log('people', people_counter.getCount());

console.log('counters', people_counter.getNumberOfCounterFactories());

places_counter = new CounterFactory();
console.log('places', places_counter.getCount());

console.log('counters', people_counter.getNumberOfCounterFactories());
console.log('counters', places_counter.getNumberOfCounterFactories());

এই কোড আউটপুট হয়:

people 0
people 1
counters 1
places 0
counters 2
counters 2

এখানে প্রাথমিক পার্থক্য আছে:

সার্ভিস

সিনট্যাক্স: module.service( 'serviceName', function );

ফলাফল: একটি ইনজেকশনযোগ্য যুক্তি হিসাবে module.service করার module.service আপনাকে module.service প্রেরিত একটি ফাংশনের উদাহরণ প্রদান করা module.service

ব্যবহার: ইনজেকশনযুক্ত ফাংশন রেফারেন্সে সহজভাবে যোগ করা () দ্বারা আহ্বান করা উপযোগী ইউটিলিটি ফাংশন ভাগ করার জন্য উপযোগী হতে পারে। injectedArg.call( this ) বা অনুরূপ সঙ্গে চালানো যেতে পারে।

কারখানা

সিনট্যাক্স: module.factory( 'factoryName', function );

ফলাফল: কারখানা module.factory যুক্তি হিসাবে ঘোষণা করার সময় আপনাকে module.factory প্রেরিত ফাংশন রেফারেন্সটি আমন্ত্রণ করে প্রদান করা মান প্রদান করা হবে।

ব্যবহার: একটি 'বর্গ' ফাংশন ফিরিয়ে দেওয়ার জন্য দরকারী হতে পারে যা দৃষ্টান্ত তৈরি করতে নতুন করে তৈরি করা যেতে পারে।

স্ট্যাকওভারফ্লো এ AngularJS ডকুমেন্টেশন এবং অনুরূপ প্রশ্নটি যাচাই করুন পরিষেবা বনাম কারখানা সম্পর্কে বিভ্রান্ত

এখানে সেবা এবং কারখানা ব্যবহার করে উদাহরণAngularJS সেবা বনাম কারখানা সম্পর্কে আরও পড়ুন।


নকশা নকশার পরিপ্রেক্ষিতে আমি তাদের মধ্যে পার্থক্য বুঝতে পেরেছি:

পরিষেবা : একটি টাইপ ফেরত, যে ধরনের একটি বস্তু তৈরি করতে নতুন করা হবে। যদি জাভা উপায়ে ব্যবহার করা হয়, পরিষেবা একটি জাভা ক্লাস সংজ্ঞা প্রদান করে

কারখানা : অবিলম্বে ব্যবহার করা যেতে পারে যে একটি কংক্রিট বস্তু প্রদান করে। জাভা এনালগিতে একটি ফ্যাক্টরি একটি জাভা অবজেক্ট প্রদান করে

যে অংশটি প্রায়ই লোকেরা (আমার সাথে সহ) বিভ্রান্ত হয় সেটি হল যে যখন আপনি আপনার কোডে কোনও পরিষেবা বা ফ্যাক্টরিকে ইনজেক্ট করেন তখন একই উপায়ে এটি ব্যবহার করা যেতে পারে, উভয় ক্ষেত্রেই আপনার কোডে যা পাওয়া যায় তা একটি কংক্রিট অবজেক্ট যা আপনি অবিলম্বে আহ্বান করতে পারেন। পরিষেবাটির ক্ষেত্রে কোনটি আপনার পক্ষ থেকে পরিষেবা ঘোষণার উপর "নতুন" কৌণিক কল করে। আমি এই একটি ধূর্ত ধারণা মনে হয়।


পরিষেবা ভ কারখানার ভিস সরবরাহকারীকে বোঝার জন্য এটি সর্বোত্তম এবং সংক্ষিপ্ত উত্তর হবে

উত্স : https://groups.google.com/forum/#!msg/angular/56sdORWEoqg/HuZsOsMvKv4J

এখানে একটি ডেমো সহ বেন কী বলেছেন jsbin

"প্রাথমিক পার্থক্যগুলি বর্ণনা করে কোডটিতে মন্তব্য রয়েছে তবে আমি এখানে কিছুটা সম্প্রসারিত করব। একটি নোট হিসাবে, আমি শুধু আমার মাথাটি ধরে ফেলছি তাই যদি আমি কিছু ভুল বলি তবে দয়া করে আমাকে জানান।

সার্ভিস

সিনট্যাক্স : module.service ('serviceName', ফাংশন);

ফলাফল : একটি ইনজেকশনযোগ্য যুক্তি হিসাবে serviceName ঘোষণা করার সময় আপনাকে module.service এ প্রেরিত প্রকৃত ফাংশন রেফারেন্স সরবরাহ করা হবে।

ব্যবহার : ইনজেকশনযুক্ত ফাংশন রেফারেন্সে সহজভাবে যোগ করা () দ্বারা আহ্বান করা উপযোগী ইউটিলিটি ফাংশন ভাগ করার জন্য উপযোগী হতে পারে। ইনজেকশনএআরজি.call (এই) বা অনুরূপ সঙ্গে চালানো যেতে পারে।

কারখানা

সিনট্যাক্স : module.factory ('factoryName', ফাংশন);

ফলাফল : কারখানা নামকে ইনজেকশেবল যুক্তি হিসাবে ঘোষণা করার সময় আপনাকে ম্যালেল.ফ্যাক্টরীতে প্রেরিত ফাংশন রেফারেন্সটি আমন্ত্রণ করে প্রদান করা মান প্রদান করা হবে।

ব্যবহার : একটি 'বর্গ' ফাংশন ফিরিয়ে দেওয়ার জন্য দরকারী হতে পারে যা দৃষ্টান্ত তৈরি করতে নতুন করে তৈরি করা যেতে পারে।

প্রোভাইডার

সিনট্যাক্স : module.provider ('প্রদানকারী নাম', ফাংশন);

ফলাফল : প্রদানকারী নামকে ইনজেকশেবল যুক্তি হিসাবে ঘোষণা করার সময় আপনাকে মডিউল.প্রভাইডারে প্রেরিত ফাংশন রেফারেন্সের $ পদ্ধতিটি সরবরাহ করে মান প্রদান করা হবে।

ব্যবহার : একটি 'বর্গ' ফাংশন ফিরিয়ে দেওয়ার জন্য উপকারী হতে পারে যা পরে ইনস্ট্যান্স তৈরি করতে নতুন করে তৈরি করা যেতে পারে তবে এটি ইনজেকশনের আগে কিছু ধরণের কনফিগারেশন প্রয়োজন। সম্ভবত প্রকল্প জুড়ে reusable যে ক্লাসের জন্য দরকারী? এখনও এই এক অলস। "বেন


মৌলিক পার্থক্যটি হল যে প্রদানকারীটি ফ্যাক্টরি ঘোষিত পরিবর্তনশীলের মধ্যে আদিম (অ-বস্তু), অ্যারে, বা কলব্যাক ফাংশন মানগুলি সেট করতে অনুমতি দেয় এবং এভাবে যদি কোনও বস্তু ফেরত পাঠানো হয় তবে এটি স্পষ্টভাবে ঘোষণা করা এবং ফেরত দেওয়া উচিত।

অপরদিকে পরিষেবাটি শুধুমাত্র ঘোষিত পরিষেবাটি কোনও বস্তুতে ঘোষিত ভেরিয়েবল সেট করতে ব্যবহার করা যেতে পারে, সুতরাং আমরা স্পষ্ট সৃষ্টি এবং বস্তুর ফিরতি এড়াতে পারি, অন্য দিকে এটি এই শব্দটির ব্যবহারকে অনুমোদন করে।

বা স্বল্প ভাষায় " পরিষেবাটি আরো সাধারণ ফর্ম, যখন পরিষেবা শুধুমাত্র বস্তুর জন্য সীমাবদ্ধ"।


সমস্ত প্রদানকারীর একই ভাবে কাজ। বিভিন্ন পদ্ধতি service , factory , factory আপনাকে কম কোডে একই জিনিস সম্পাদন করতে দেয়।

PS এছাড়াও value এবং constant

provider সাথে শৃঙ্খলে শুরু হওয়া শৃঙ্খলের নিচে প্রতিটি বিশেষ কেস এবং value সহ শেষ হওয়ার সাথে সাথে একটি অতিরিক্ত সীমাবদ্ধতা রয়েছে। সুতরাং তাদের মধ্যে সিদ্ধান্ত নেওয়ার জন্য আপনাকে নিজেকে জিজ্ঞাসা করতে হবে যা কম কোড দিয়ে আপনি যা চান তা সম্পাদন করুন।

এখানে একটি ছবি যা আপনাকে বোঝায় তা বোঝায়:

ব্লগ পোস্টে আপনি ভাঙ্গন এবং রেফারেন্স গাইডটি পেতে পারেন: আমি এই ছবিটি পেয়েছি:


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

AngularJS এ একটি পরিষেবা একটি সিঙ্গলটন জাভাস্ক্রিপ্ট অবজেক্ট যা ফাংশনের একটি সেট রয়েছে

var myModule = angular.module("myModule", []);

myModule.value  ("myValue"  , "12345");

function MyService(myValue) {
    this.doIt = function() {
        console.log("done: " + myValue;
    }
}

myModule.service("myService", MyService);
myModule.controller("MyController", function($scope, myService) {

    myService.doIt();

});

ফ্যাক্টরি স্টাইল: ( আরো জড়িত কিন্তু আরো পরিশীলিত ) ফাংশনের রিটার্ন মান প্রদান করে: জাভাতে নতুন বস্তু () এর মতো একটি বস্তু তাত্ক্ষণিকভাবে চালু করুন।

কারখানা একটি ফাংশন যে মান তৈরি করে। যখন কোনও পরিষেবা, কন্ট্রোলার ইত্যাদির জন্য একটি কারখানা থেকে ইনজেকশন নেওয়া দরকার তখন কারখানাটি চাহিদা অনুসারে মান তৈরি করে। একবার তৈরি হয়ে গেলে, মানটি সমস্ত পরিষেবা, কন্ট্রোলার ইত্যাদির জন্য পুনঃব্যবহৃত হয় যার জন্য এটি ইনজেকশনের প্রয়োজন।

var myModule = angular.module("myModule", []);

myModule.value("numberValue", 999);

myModule.factory("myFactory", function(numberValue) {
    return "a value: " + numberValue;
})  
myModule.controller("MyController", function($scope, myFactory) {

    console.log(myFactory);

});

সরবরাহকারী শৈলী: ( সম্পূর্ণ ফুটো, কনফিগারযোগ্য সংস্করণ ) ফাংশনের $ ফাংশন ফাংশন আউটপুট প্রদান করে: কনফিগারযোগ্য।

AngularJS এর ​​সরবরাহকারীরা আপনি তৈরি করতে পারেন এমন কারখানাগুলির সবচেয়ে নমনীয় ফর্ম। আপনি কোনও পরিষেবা বা কারখানার সাথে কোনও মডিউলের সাথে কোনও প্রদানকারীর নিবন্ধন করেন, কেবলমাত্র আপনি প্রদানকারীর () ফাংশনটি ব্যবহার করেন।

var myModule = angular.module("myModule", []);

myModule.provider("mySecondService", function() {
    var provider = {};
    var config   = { configParam : "default" };

    provider.doConfig = function(configParam) {
        config.configParam = configParam;
    }

    provider.$get = function() {
        var service = {};

        service.doService = function() {
            console.log("mySecondService: " + config.configParam);
        }

        return service;
    }

    return provider;
});

myModule.config( function( mySecondServiceProvider ) {
    mySecondServiceProvider.doConfig("new config param");
});

myModule.controller("MyController", function($scope, mySecondService) {

    $scope.whenButtonClicked = function() {
        mySecondService.doIt();
    }

});

src jenkov

<!DOCTYPE html>
    <html ng-app="app">
    <head>
    	<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.min.js"></script>
    	<meta charset=utf-8 />
    	<title>JS Bin</title>
    </head>
    <body ng-controller="MyCtrl">
    	{{serviceOutput}}
    	<br/><br/>
    	{{factoryOutput}}
    	<br/><br/>
    	{{providerOutput}}
    
    	<script>
    
    		var app = angular.module( 'app', [] );
    
    		var MyFunc = function() {
    
    			this.name = "default name";
    
    			this.$get = function() {
    				this.name = "new name"
    				return "Hello from MyFunc.$get(). this.name = " + this.name;
    			};
    
    			return "Hello from MyFunc(). this.name = " + this.name;
    		};
    
    		// returns the actual function
    		app.service( 'myService', MyFunc );
    
    		// returns the function's return value
    		app.factory( 'myFactory', MyFunc );
    
    		// returns the output of the function's $get function
    		app.provider( 'myProv', MyFunc );
    
    		function MyCtrl( $scope, myService, myFactory, myProv ) {
    
    			$scope.serviceOutput = "myService = " + myService;
    			$scope.factoryOutput = "myFactory = " + myFactory;
    			$scope.providerOutput = "myProvider = " + myProv;
    
    		}
    
    	</script>
    
    </body>
    </html>

jsbin

<!DOCTYPE html>
<html ng-app="myApp">
<head>
	<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.min.js"></script>
	<meta charset=utf-8 />
	<title>JS Bin</title>
</head>
<body>
<div ng-controller="MyCtrl">
    {{hellos}}
</div>
	<script>

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

//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
    this.sayHello = function() {
        return "Hello, World!"
    };
});

//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
    return {
        sayHello: function() {
            return "Hello, World!"
        }
    };
});
    
//provider style, full blown, configurable version     
myApp.provider('helloWorld', function() {

    this.name = 'Default';

    this.$get = function() {
        var name = this.name;
        return {
            sayHello: function() {
                return "Hello, " + name + "!"
            }
        }
    };

    this.setName = function(name) {
        this.name = name;
    };
});

//hey, we can configure a provider!            
myApp.config(function(helloWorldProvider){
    helloWorldProvider.setName('World');
});
        

function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {
    
    $scope.hellos = [
        helloWorld.sayHello(),
        helloWorldFromFactory.sayHello(),
        helloWorldFromService.sayHello()];
}
	</script>

</body>
</html>

jsfiddle


সমস্ত কৌণিক সেবা singletons হয় :

দস্তাবেজ ( একক হিসাবে পরিষেবা দেখুন): https://docs.angularjs.org/guide/services

অবশেষে, এটি উপলব্ধ করা গুরুত্বপূর্ণ যে সমস্ত কৌণিক পরিষেবা অ্যাপ্লিকেশন একক। এর মানে হল ইনজেক্টর প্রতি প্রদত্ত পরিষেবাটির একমাত্র উদাহরণ।

মূলত পরিষেবা এবং কারখানা মধ্যে পার্থক্য নিম্নরূপ:

app.service('myService', function() {

  // service is just a constructor function
  // that will be called with 'new'

  this.sayHello = function(name) {
     return "Hi " + name + "!";
  };
});

app.factory('myFactory', function() {

  // factory returns an object
  // you can run some code before

  return {
    sayHello : function(name) {
      return "Hi " + name + "!";
    }
  }
});

এই উপস্থাপনাটি প্রায় $ প্রদান করে দেখুন: http://slides.wesalvaro.com/20121113/#/

যারা স্লাইডগুলি AngularJs মিলআপগুলির একটিতে ব্যবহৃত হয়েছিল: http://blog.angularjs.org/2012/11/more-angularjs-meetup-videos.html


AngularJS এ ব্যবসায় লজিক পরিচালনা করার তিনটি উপায় রয়েছে: ( Yaakov এর Coursera AngularJS কোর্স দ্বারা অনুপ্রাণিত ) যা:

  1. সেবা
  2. কারখানা
  3. প্রদানকারী

এখানে আমরা শুধুমাত্র পরিষেবা বনাম কারখানা সম্পর্কে কথা বলতে যাচ্ছি

সেবা :

বাক্য গঠন:

app.js

 var app = angular.module('ServiceExample',[]);
 var serviceExampleController =
              app.controller('ServiceExampleController', ServiceExampleController);
 var serviceExample = app.service('NameOfTheService', NameOfTheService);

 ServiceExampleController.$inject = ['NameOfTheService'] //very important as this protects from minification of js files

function ServiceExampleController(NameOfTheService){
     serviceExampleController = this;
     serviceExampleController.data = NameOfTheService.getSomeData();
 }

function NameOfTheService(){
     nameOfTheService = this;
     nameOfTheService.data = "Some Data";
     nameOfTheService.getSomeData = function(){
           return nameOfTheService.data;
     }     
}

index.html

<div ng-controller = "ServiceExampleController as serviceExample">
   {{serviceExample.data}}
</div>

সেবা প্রধান বৈশিষ্ট্য:

  1. আরামদায়ক Instantiated : সেবা ইনজেকশন না হয়, তাহলে এটা অবিলম্বে তাত্ক্ষণিক হবে না। তাই এটি ব্যবহার করার জন্য আপনাকে এটি একটি মডিউলে প্রবেশ করতে হবে।

  2. এককন্টন : যদি এটি একাধিক মডিউলগুলিতে ইনজেকশিত হয়, তবে সমস্ত কেবলমাত্র একটি বিশেষ উদাহরণ অ্যাক্সেস থাকবে। এজন্য, বিভিন্ন কন্ট্রোলার জুড়ে ডেটা ভাগ করা খুব সুবিধাজনক।

কারখানা

এখন আসুন AngularJS মধ্যে কারখানার সম্পর্কে কথা বলা যাক

প্রথম সিনট্যাক্স একটি চেহারা আছে যাক :

app.js :

var app = angular.module('FactoryExample',[]);
var factoryController = app.controller('FactoryController', FactoryController);
var factoryExampleOne = app.factory('NameOfTheFactoryOne', NameOfTheFactoryOne);
var factoryExampleTwo = app.factory('NameOfTheFactoryTwo', NameOfTheFactoryTwo);

//first implementation where it returns a function
function NameOfTheFactoryOne(){
   var factory = function(){
      return new SomeService();
    }
   return factory;
}

//second implementation where an object literal would be returned
function NameOfTheFactoryTwo(){
   var factory = {
      getSomeService : function(){
          return new SomeService();
       }
    };
   return factory;
}

এখন নিয়ামক উপরের দুই ব্যবহার করে:

 var factoryOne = NameOfTheFactoryOne() //since it returns a function
 factoryOne.someMethod();

 var factoryTwo = NameOfTheFactoryTwo.getSomeService(); //accessing the object
 factoryTwo.someMethod();

কারখানা বৈশিষ্ট্য:

  1. এই ধরনের সেবা কারখানা নকশা প্যাটার্ন অনুসরণ । কারখানাটি এমন একটি কেন্দ্রীয় স্থান হিসাবে বিবেচিত হতে পারে যা নতুন বস্তু বা পদ্ধতি তৈরি করে।

  2. এটি শুধুমাত্র সিঙ্গল্ট উত্পাদন করে না, তবে কাস্টমাইজযোগ্য পরিষেবাগুলিও।

  3. .service()পদ্ধতি হল কারখানা যে সবসময় সেবার একই ধরনের, যা একটি Singleton হয় উৎপন্ন হয়। তার আচরণ কনফিগার করার কোন সহজ উপায় নেই। যে .service()পদ্ধতি সাধারণত কোন কনফিগারেশন প্রয়োজন হয় না যে জন্য একটি শর্টকাট হিসাবে ব্যবহার করা হয়।


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


  • সঙ্গে কারখানা আপনি আসলে একটি তৈরি বস্তুর ভেতরে কারখানা এবং এটি ফিরে।
  • সঙ্গে সেবা আপনি শুধুমাত্র একটি আছে মান ফাংশন ব্যবহার করে thisফাংশন নির্ধারণ করতে শব্দ।
  • সরবরাহকারীর সাথে $getআপনি কোনও সংজ্ঞা সংজ্ঞায়িত করেন এবং এটি এমন তথ্য পাওয়ার জন্য ব্যবহার করা যেতে পারে যা তথ্য ফেরত দেয়।




angularjs