একটি মধ্যে পার্থক্য কি কি Service
, Provider
এবং Factory
AngularJS মধ্যে?
service.factory
। এই বিষয়টিকে আরও জটিল করতে চাননি।
একটি মধ্যে পার্থক্য কি কি Service
, Provider
এবং Factory
AngularJS মধ্যে?
service.factory
। এই বিষয়টিকে আরও জটিল করতে চাননি।
উত্তর:
অ্যাঙ্গুলারজেএস মেলিং তালিকা থেকে আমি একটি আশ্চর্যজনক থ্রেড পেয়েছি যা পরিষেবা বনাম কারখানা বনাম সরবরাহকারী এবং তাদের ইঞ্জেকশন ব্যবহারের ব্যাখ্যা করে। উত্তর সংকলন:
সিনট্যাক্স: module.service( 'serviceName', function );
ফলাফল: যখন সার্ভিসনামকে ইনজেক্টেবল আর্গুমেন্ট হিসাবে ঘোষণা করার সময় আপনাকে ফাংশনের একটি উদাহরণ সরবরাহ করা হবে। অন্য কথায় new FunctionYouPassedToService()
।
সিনট্যাক্স: module.factory( 'factoryName', function );
ফলাফল: ফ্যাক্টরিনামকে ইনজেক্টেবল আর্গুমেন্ট হিসাবে ঘোষণা করার সময় আপনাকে মডিউল.ফ্যাক্টরিতে ফাংশন রেফারেন্সের সাহায্যে ফিরে আসা মানটি সরবরাহ করা হবে ।
সিনট্যাক্স: module.provider( 'providerName', function );
ফলাফল: সরবরাহকারীর নামকে ইনজেকশনযোগ্য যুক্তি হিসাবে ঘোষণা করার সময় আপনাকে সরবরাহ করা হবে (new ProviderFunction()).$get()
। কনস্ট্রাক্টর ফাংশনটি $ get মেথড ProviderFunction
বলার আগে তড়িঘড়ি করা হয় - এটি ফাংশন রেফারেন্সটি মডিউল.প্রভাইডারে পাস করা হয়।
সরবরাহকারীদের সুবিধা রয়েছে যে তারা মডিউল কনফিগারেশন পর্যায়ে কনফিগার করা যায়।
প্রদত্ত কোডের জন্য এখানে দেখুন ।
মিসকো দ্বারা এখানে আরও দুর্দান্ত ব্যাখ্যা দেওয়া হয়েছে:
provide.value('a', 123);
function Controller(a) {
expect(a).toEqual(123);
}
এক্ষেত্রে ইনজেক্টর কেবল সেই মানটি ফিরিয়ে দেয়। কিন্তু আপনি যদি মান গণনা করতে চান? তারপরে একটি কারখানা ব্যবহার করুন
provide.factory('b', function(a) {
return a*2;
});
function Controller(b) {
expect(b).toEqual(246);
}
সুতরাং factory
একটি ফাংশন যা মান তৈরি করার জন্য দায়ী। লক্ষ্য করুন যে কারখানার কার্যকারিতা অন্যান্য নির্ভরতা জিজ্ঞাসা করতে পারে।
তবে আপনি যদি আরও ওও হতে চান এবং গ্রেটার নামে একটি ক্লাস চান তবে কী হবে?
function Greeter(a) {
this.greet = function() {
return 'Hello ' + a;
}
}
তাহলে তাত্ক্ষণিকভাবে আপনাকে লিখতে হবে
provide.factory('greeter', function(a) {
return new Greeter(a);
});
তারপরে আমরা এর মতো নিয়ামকটিতে 'গ্রিটার' চাইতে পারি
function Controller(greeter) {
expect(greeter instanceof Greeter).toBe(true);
expect(greeter.greet()).toEqual('Hello 123');
}
তবে এটি উপায় খুব শব্দযুক্ত। এটি লেখার একটি ছোট উপায় হবেprovider.service('greeter', Greeter);
কিন্তু যদি আমরা Greeter
ইঞ্জেকশনের আগে ক্লাসটি কনফিগার করতে চাইতাম ? তাহলে আমরা লিখতে পারতাম
provide.provider('greeter2', function() {
var salutation = 'Hello';
this.setSalutation = function(s) {
salutation = s;
}
function Greeter(a) {
this.greet = function() {
return salutation + ' ' + a;
}
}
this.$get = function(a) {
return new Greeter(a);
};
});
তারপরে আমরা এটি করতে পারি:
angular.module('abc', []).config(function(greeter2Provider) {
greeter2Provider.setSalutation('Halo');
});
function Controller(greeter2) {
expect(greeter2.greet()).toEqual('Halo 123');
}
একটি সাইড নোট হিসাবে, service
, factory
, এবং value
সব প্রদানকারীর থেকে উদ্ভূত হয়।
provider.service = function(name, Class) {
provider.provide(name, function() {
this.$get = function($injector) {
return $injector.instantiate(Class);
};
});
}
provider.factory = function(name, factory) {
provider.provide(name, function() {
this.$get = function($injector) {
return $injector.invoke(factory);
};
});
}
provider.value = function(name, value) {
provider.factory(name, function() {
return value;
});
};
toEqual
এবং greeter.Greet
হয়। সামান্য আরও বাস্তব এবং সম্পর্কিত সম্পর্কিত কিছু ব্যবহার করবেন না কেন?
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() {
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 src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp">
<div ng-controller="MyCtrl">
{{hellos}}
</div>
</body>
this
প্রসঙ্গে পরিবর্তন হয় না $get
? - আপনি আর এই ফাংশনে ইনস্ট্যান্টেটেড সরবরাহকারীর কাছে আর উল্লেখ করেন না।
this
আসলে প্রসঙ্গটি বদলায় না, কারণ যা বলা হচ্ছে তা হ'ল new Provider()
$ পান (), যেখানে Provider
ফাংশনটি পাস হচ্ছে app.provider
। এর অর্থ এটি নির্মিত $get()
হিসাবে একটি পদ্ধতি হিসাবে বলা হচ্ছে Provider
, তাই উদাহরণ হিসাবে প্রস্তাব হিসাবে this
উল্লেখ করা হবে Provider
।
Unknown provider: helloWorldProvider <- helloWorld
স্থানীয়ভাবে এটি চালানোর সময় আমি কেন পাব ? এটি মন্তব্য করে, অন্যান্য 2 উদাহরণের জন্য একই ত্রুটি। কিছু গোপন সরবরাহকারী কনফিগারেশন আছে? (কৌণিক 1.0.8) - পাওয়া গেছে: স্ট্যাকওভারফ্লো.com
টিএল; ডিআর
1) আপনি যখন কারখানাটি ব্যবহার করেন আপনি কোনও বস্তু তৈরি করেন, এতে বৈশিষ্ট্য যুক্ত করুন, তারপরে একই জিনিসটি ফিরিয়ে দিন। আপনি যখন এই ফ্যাক্টরিটিকে আপনার নিয়ামকের মধ্যে পাস করেন তখন অবজেক্টের সেই বৈশিষ্ট্যগুলি এখন আপনার কারখানার মাধ্যমে সেই নিয়ামকটিতে উপলব্ধ।
app.controller(‘myFactoryCtrl’, function($scope, myFactory){
$scope.artist = myFactory.getArtist();
});
app.factory(‘myFactory’, function(){
var _artist = ‘Shakira’;
var service = {};
service.getArtist = function(){
return _artist;
}
return service;
});
২) আপনি যখন পরিষেবাটি ব্যবহার করছেন , তখন কৌণিক জেএস 'নতুন' কীওয়ার্ড দিয়ে পর্দার আড়ালে তা ইনস্ট্যান্ট করে। তার কারণে, আপনি 'এটি'-তে বৈশিষ্ট্য যুক্ত করবেন এবং পরিষেবাটি' এটি 'ফেরত দেবে। আপনি যখন পরিষেবাটি আপনার নিয়ামকের মধ্যে পাস করেন, 'এই' এর এই বৈশিষ্ট্যগুলি এখন আপনার পরিষেবার মাধ্যমে সেই নিয়ামকটিতে উপলভ্য হবে।
app.controller(‘myServiceCtrl’, function($scope, myService){
$scope.artist = myService.getArtist();
});
app.service(‘myService’, function(){
var _artist = ‘Nelly’;
this.getArtist = function(){
return _artist;
}
});
3) সরবরাহকারীরা হ'ল একমাত্র পরিষেবা যা আপনি আপনার .config () ফাংশনে যেতে পারেন। আপনি যখন পরিষেবা পরিষেবা উপলব্ধ করার আগে মডিউল-ওয়াইড কনফিগারেশন সরবরাহ করতে চান তখন কোনও সরবরাহকারীর ব্যবহার করুন।
app.controller(‘myProvider’, function($scope, myProvider){
$scope.artist = myProvider.getArtist();
$scope.data.thingFromConfig = myProvider.thingOnConfig;
});
app.provider(‘myProvider’, function(){
//Only the next two lines are available in the app.config()
this._artist = ‘’;
this.thingFromConfig = ‘’;
this.$get = function(){
var that = this;
return {
getArtist: function(){
return that._artist;
},
thingOnConfig: that.thingFromConfig
}
}
});
app.config(function(myProviderProvider){
myProviderProvider.thingFromConfig = ‘This was set in config’;
});
নন টিএল; ডিআর
1) কারখানা
কারখানাগুলি কোনও পরিষেবা তৈরি এবং কনফিগার করার সর্বাধিক জনপ্রিয় উপায়। টিএল যা বলেছিল তার চেয়ে সত্য আর কিছুই নেই; আপনি কেবল একটি অবজেক্ট তৈরি করুন, এতে বৈশিষ্ট্য যুক্ত করুন, তারপরে একই জিনিসটি ফিরিয়ে দিন। তারপরে আপনি যখন কারখানাটি আপনার নিয়ামকের মধ্যে পাস করবেন তখন অবজেক্টের সেই বৈশিষ্ট্যগুলি এখন আপনার কারখানার মাধ্যমে সেই নিয়ামকটিতে উপলব্ধ। আরও বিস্তৃত উদাহরণ নীচে।
app.factory(‘myFactory’, function(){
var service = {};
return service;
});
এখন আমরা 'পরিষেবাদি'র সাথে সংযুক্ত থাকা যে কোনও বৈশিষ্ট্য আমাদের কন্ট্রোলারে' মাইফ্যাক্টরি 'পাস করার পরে আমাদের জন্য উপলব্ধ থাকবে।
এখন আমাদের কলব্যাক ফাংশনে কিছু 'প্রাইভেট' ভেরিয়েবল যুক্ত করা যাক। এগুলি সরাসরি নিয়ামকের কাছ থেকে অ্যাক্সেসযোগ্য হবে না, তবে আমরা প্রয়োজনে এই 'ব্যক্তিগত' ভেরিয়েবলগুলিকে পরিবর্তন করতে সক্ষম হতে শেষ পর্যন্ত 'পরিষেবা' তে কিছু গেটর / সেটার পদ্ধতি সেট করব।
app.factory(‘myFactory’, function($http, $q){
var service = {};
var baseUrl = ‘https://itunes.apple.com/search?term=’;
var _artist = ‘’;
var _finalUrl = ‘’;
var makeUrl = function(){
_artist = _artist.split(‘ ‘).join(‘+’);
_finalUrl = baseUrl + _artist + ‘&callback=JSON_CALLBACK’;
return _finalUrl
}
return service;
});
এখানে আপনি লক্ষ্য করবেন যে আমরা সেই ভেরিয়েবলগুলি / ফাংশনটিকে 'পরিষেবার' সাথে সংযুক্ত করছি না। আমরা পরে এগুলি ব্যবহার বা সংশোধন করার জন্য কেবল এগুলি তৈরি করছি।
এখন যেহেতু আমাদের সহায়ক / ব্যক্তিগত ভেরিয়েবল এবং ফাংশনটি রয়েছে, আসুন 'পরিষেবা' অবজেক্টে কিছু বৈশিষ্ট্য যুক্ত করুন। আমরা 'পরিষেবা' যাই থাকি না কেন আমরা যে কোনও নিয়ামককে 'মাইফ্যাক্টরি' দিয়ে যাব তার ভিতরে সরাসরি ব্যবহার করা যেতে পারে।
আমরা সেটআরটিস্ট এবং getArtist পদ্ধতি তৈরি করতে যা যা কেবল শিল্পীকে ফিরে আসে বা সেট করে। আমরা এমন একটি পদ্ধতি তৈরি করতে যাচ্ছি যা আমাদের তৈরি ইউআরএল দিয়ে আইটিউনস এপিআই কল করবে। এই পদ্ধতিটি এমন প্রতিশ্রুতি ফেরত যাচ্ছে যা আইটিউনস এপিআই থেকে ডেটা ফিরে আসার পরে পূরণ করবে fulfill অ্যাঙ্গুলারজেএস-এ প্রতিশ্রুতি ব্যবহার করার মতো অভিজ্ঞতা যদি আপনার না হয় তবে আমি তাদের প্রতি গভীর ডুব দেওয়ার পরামর্শ দিচ্ছি।
নীচে সেটআর্টিস্ট একজন শিল্পীকে গ্রহণ করে এবং আপনাকে শিল্পী সেট করার অনুমতি দেয়। getArtist শিল্পীকে ফিরিয়ে দেয়। callItunes প্রথম আদেশ URL টি আমরা আমাদের $ HTTP অনুরোধের সাথে ব্যবহার করব নির্মাণ করার জন্য makeUrl () কল। তারপরে এটি একটি প্রতিশ্রুতি অবজেক্ট সেট আপ করে, আমাদের চূড়ান্ত ইউআরএল দিয়ে একটি request HTTP অনুরোধ করে, তারপরে যেহেতু $ http কোনও প্রতিশ্রুতি ফিরিয়ে দেয়, আমরা আমাদের অনুরোধের পরে .success বা .error কল করতে সক্ষম হয়েছি। তারপরে আমরা আইটিউনস ডেটা দিয়ে আমাদের প্রতিশ্রুতিটি সমাধান করি, বা আমরা 'একটি ত্রুটি হয়েছিল' এমন বার্তা দিয়ে তা প্রত্যাখ্যান করি।
app.factory('myFactory', function($http, $q){
var service = {};
var baseUrl = 'https://itunes.apple.com/search?term=';
var _artist = '';
var _finalUrl = '';
var makeUrl = function(){
_artist = _artist.split(' ').join('+');
_finalUrl = baseUrl + _artist + '&callback=JSON_CALLBACK'
return _finalUrl;
}
service.setArtist = function(artist){
_artist = artist;
}
service.getArtist = function(){
return _artist;
}
service.callItunes = function(){
makeUrl();
var deferred = $q.defer();
$http({
method: 'JSONP',
url: _finalUrl
}).success(function(data){
deferred.resolve(data);
}).error(function(){
deferred.reject('There was an error')
})
return deferred.promise;
}
return service;
});
এখন আমাদের কারখানাটি সম্পূর্ণ। আমরা এখন যে কোনও কন্ট্রোলারে 'মাইফ্যাক্টরি' ইনজেক্ট করতে সক্ষম হয়েছি এবং তারপরে আমরা আমাদের পদ্ধতিগুলিকে কল করতে সক্ষম হব যা আমরা আমাদের পরিষেবা অবজেক্টের সাথে সংযুক্ত করেছি (সেটআর্টিস্ট, গেটআর্টিস্ট, এবং কলআইটিউনস)।
app.controller('myFactoryCtrl', function($scope, myFactory){
$scope.data = {};
$scope.updateArtist = function(){
myFactory.setArtist($scope.data.artist);
};
$scope.submitArtist = function(){
myFactory.callItunes()
.then(function(data){
$scope.data.artistData = data;
}, function(data){
alert(data);
})
}
});
উপরের কন্ট্রোলারে আমরা 'মাইফ্যাক্টরি' পরিষেবাতে ইনজেকশন দিচ্ছি। তারপরে আমরা 'মাইফ্যাক্টরি' থেকে ডেটা সহ আমাদের $ স্কোপ অবজেক্টে বৈশিষ্ট্য সেট করি। উপরের একমাত্র কূটকীয় কোডটি হ'ল যদি আপনি এর আগে প্রতিশ্রুতিগুলির সাথে আচরণ না করেন। কল আইটিউনস কোনও প্রতিশ্রুতি ফিরিয়ে দিচ্ছে, তাই আমরা আইটিউনস ডেটা দিয়ে আমাদের প্রতিশ্রুতি পূরণ হওয়ার পরে। () পদ্ধতিটি ব্যবহার করতে সক্ষম হয়েছি এবং কেবলমাত্র স্কটি.ডাটা.আর্টিস্টডেটা সেট করব। আপনি দেখতে পাবেন যে আমাদের নিয়ামকটি খুব 'পাতলা' (এটি একটি ভাল কোডিং অনুশীলন)। আমাদের সমস্ত যুক্তিযুক্ত এবং অবিচলিত ডেটা আমাদের পরিষেবাতে অবস্থিত, আমাদের নিয়ামকের মধ্যে নয়।
2) পরিষেবা
কোনও পরিষেবা তৈরি করার সময় সবচেয়ে বড় জিনিসটি হ'ল এটি 'নতুন' কীওয়ার্ড দিয়ে ইনস্ট্যান্ট করা। আপনার জাভাস্ক্রিপ্ট গুরুগুলির জন্য এটি আপনাকে কোডের প্রকৃতির একটি বড় ইঙ্গিত দেবে। আপনারা জাভাস্ক্রিপ্টের সীমিত পটভূমিতে বা যারা 'নতুন' কীওয়ার্ডটি আসলে কী করেন তার সাথে খুব বেশি পরিচিত নন, তাদের জন্য কিছু জাভাস্ক্রিপ্ট মূলসূত্রগুলি পর্যালোচনা করুন যা পরিশেষে কোনও পরিষেবার প্রকৃতি বুঝতে আমাদের সহায়তা করবে।
আপনি যখন 'নতুন' কীওয়ার্ডের সাহায্যে কোনও ফাংশনটি আহ্বান করবেন তখন সত্যিই ঘটে যাওয়া পরিবর্তনগুলি দেখতে, আসুন একটি ফাংশন তৈরি করি এবং এটি 'নতুন' কীওয়ার্ডের সাহায্যে প্রার্থনা করি, তারপরে দোভাষী কীভাবে এটি 'নতুন' কীওয়ার্ডটি দেখেন তা দেখান। শেষ ফলাফল উভয়ই এক হবে।
প্রথমে আমাদের কনস্ট্রাক্টর তৈরি করা যাক।
var Person = function(name, age){
this.name = name;
this.age = age;
}
এটি একটি সাধারণ জাভাস্ক্রিপ্ট কনস্ট্রাক্টর ফাংশন। এখন যখনই আমরা 'নতুন' কীওয়ার্ড ব্যবহার করে ব্যক্তি ফাংশনটি শুরু করব তখনই 'এটি' সদ্য নির্মিত বস্তুর সাথে আবদ্ধ থাকবে।
এখন আসুন আমরা আমাদের ব্যক্তির প্রোটোটাইপটিতে একটি পদ্ধতি যুক্ত করি যাতে এটি আমাদের ব্যক্তি 'শ্রেণি'র প্রতিটি উদাহরণে উপলব্ধ।
Person.prototype.sayName = function(){
alert(‘My name is ‘ + this.name);
}
এখন, যেহেতু আমরা প্রোটোটাইপের উপর sayName ফাংশনটি রেখেছি, ততক্ষণ প্রতিটি ব্যক্তির সেই উদাহরণটির নাম সতর্কতার জন্য sayName ফাংশনটি কল করতে সক্ষম হবে।
এখন যেহেতু আমাদের পার্সোন কনস্ট্রাক্টর ফাংশন এবং এর প্রোটোটাইপে আমাদের sayName ফাংশন রয়েছে, আসুন প্রকৃতপক্ষে ব্যক্তির একটি উদাহরণ তৈরি করি তারপরে sayName ফাংশনটি কল করি।
var tyler = new Person(‘Tyler’, 23);
tyler.sayName(); //alerts ‘My name is Tyler’
সুতরাং সমস্ত একসাথে একজন ব্যক্তির কনস্ট্রাক্টর তৈরির জন্য কোড, এর প্রোটোটাইপটিতে একটি ফাংশন যুক্ত করে, একজন ব্যক্তি উদাহরণ তৈরি করে এবং তার প্রোটোটাইপে ফাংশনটি কল করার পরে এটি দেখতে এরকম দেখাচ্ছে।
var Person = function(name, age){
this.name = name;
this.age = age;
}
Person.prototype.sayName = function(){
alert(‘My name is ‘ + this.name);
}
var tyler = new Person(‘Tyler’, 23);
tyler.sayName(); //alerts ‘My name is Tyler’
এখন আপনি জাভাস্ক্রিপ্টে 'নতুন' কীওয়ার্ডটি ব্যবহার করার সময় আসলে কী ঘটছে তা দেখুন। প্রথম যে বিষয়টি আপনার লক্ষ্য করা উচিত তা হ'ল আমাদের উদাহরণে 'নতুন' ব্যবহার করার পরে, আমরা 'টাইলার'-তে কোনও পদ্ধতি (sayName) কল করতে সক্ষম হলাম যেমন এটি কোনও বস্তু - কারণ এটি। সুতরাং প্রথমে, আমরা জানি যে আমাদের পার্সোন কনস্ট্রাক্টর একটি বস্তু ফিরিয়ে দিচ্ছে, আমরা কোডটিতে তা দেখতে পারি কিনা। দ্বিতীয়ত, আমরা জানি যেহেতু আমাদের sayName ফাংশনটি প্রোটোটাইপের উপর অবস্থিত এবং সরাসরি ব্যক্তি উদাহরণে নয়, ব্যক্তি ফাংশনটি যে বস্তুটি ফিরিয়ে দিচ্ছে তা অবশ্যই ব্যর্থ অনুসন্ধানগুলিতে তার প্রোটোটাইপকে অর্পণ করতে হবে। আরও সহজ শর্তে, আমরা যখন টাইলারসেসনেম () ডাকি তখন অনুবাদক বলেন, "ঠিক আছে, আমি 'টিলার' অবজেক্টটি সন্ধান করব যা আমরা সবে তৈরি করেছি, সেনেম ফাংশনটি সন্ধান করব, তারপরে এটিকে কল করব। এক মিনিট অপেক্ষা করুন, আমি এখানে এটি দেখতে পাচ্ছি না - আমি যা দেখি তা হ'ল নাম এবং বয়স, আমাকে প্রোটোটাইপ পরীক্ষা করতে দিন হ্যাঁ, মনে হচ্ছে এটি প্রোটোটাইপে রয়েছে, আমাকে এটি কল করতে দিন।
'নতুন' কীওয়ার্ডটি আসলে জাভাস্ক্রিপ্টে কী করছে সে সম্পর্কে আপনি কীভাবে ভাবতে পারেন তার নীচে কোডটি রয়েছে। এটি মূলত উপরের অনুচ্ছেদের একটি কোড উদাহরণ। আমি 'ইন্টারপ্রিটার ভিউ' বা নোটের ভিতরে দোভাষী যেভাবে কোডটি দেখি সেভাবে রেখেছি।
var Person = function(name, age){
//The below line creates an object(obj) that will delegate to the person’s prototype on failed lookups.
//var obj = Object.create(Person.prototype);
//The line directly below this sets ‘this’ to the newly created object
//this = obj;
this.name = name;
this.age = age;
//return this;
}
জাভাস্ক্রিপ্টে 'নতুন' কীওয়ার্ডটি আসলে কী করে সে সম্পর্কে এই জ্ঞান থাকা, AngularJS- এ একটি পরিষেবা তৈরি করা বোঝা সহজ হওয়া উচিত।
কোনও পরিষেবা তৈরি করার সময় সবচেয়ে বড় বিষয়টি বুঝতে হবে যে পরিষেবাগুলি 'নতুন' কীওয়ার্ড দিয়ে ইনস্ট্যান্ট হয়। উপরের আমাদের উদাহরণগুলির সাথে সেই জ্ঞানের সংমিশ্রণ করা, আপনাকে এখন স্বীকৃতি দেওয়া উচিত যে আপনি নিজের সম্পত্তি এবং পদ্ধতিগুলি সরাসরি 'এটি'র সাথে সংযুক্ত করছেন যা পরে পরিষেবা থেকেই ফিরে আসবে। এর এটিকে এক নজরে দেখি।
আমরা কারখানার উদাহরণ দিয়ে মূলত যা করেছি তার বিপরীতে, আমাদের কোনও বস্তু তৈরি করার দরকার নেই তারপরে সেই বস্তুটি ফিরিয়ে আনতে হবে কারণ যেমনটি এর আগেও বহুবার উল্লিখিত হয়েছিল, আমরা 'নতুন' কীওয়ার্ডটি ব্যবহার করেছি যাতে দোভাষী সেই অবজেক্টটি তৈরি করে, তার কাছে এটি অর্পণ করা হয় এটি প্রোটোটাইপ, তারপরে আমাদের কাজটি না করে আমাদের জন্য এটি ফিরিয়ে দিন।
প্রথম জিনিসগুলি প্রথমে আমাদের 'ব্যক্তিগত' এবং সহায়ক ফাংশন তৈরি করা যাক। এটি আমাদের পরিচিত কারখানার সাথে ঠিক একই জিনিসটি করার কারণে এটি খুব পরিচিত হওয়া উচিত। আমি এখানে প্রতিটি লাইন কী করে তা ব্যাখ্যা করব না কারণ আমি কারখানার উদাহরণে এটি করেছি, আপনি যদি বিভ্রান্ত হন তবে কারখানার উদাহরণটি পুনরায় পড়ুন।
app.service('myService', function($http, $q){
var baseUrl = 'https://itunes.apple.com/search?term=';
var _artist = '';
var _finalUrl = '';
var makeUrl = function(){
_artist = _artist.split(' ').join('+');
_finalUrl = baseUrl + _artist + '&callback=JSON_CALLBACK'
return _finalUrl;
}
});
এখন, আমরা আমাদের সমস্ত পদ্ধতি যুক্ত করব যা আমাদের নিয়ামকটিতে 'এটি'র জন্য উপলব্ধ available
app.service('myService', function($http, $q){
var baseUrl = 'https://itunes.apple.com/search?term=';
var _artist = '';
var _finalUrl = '';
var makeUrl = function(){
_artist = _artist.split(' ').join('+');
_finalUrl = baseUrl + _artist + '&callback=JSON_CALLBACK'
return _finalUrl;
}
this.setArtist = function(artist){
_artist = artist;
}
this.getArtist = function(){
return _artist;
}
this.callItunes = function(){
makeUrl();
var deferred = $q.defer();
$http({
method: 'JSONP',
url: _finalUrl
}).success(function(data){
deferred.resolve(data);
}).error(function(){
deferred.reject('There was an error')
})
return deferred.promise;
}
});
এখন ঠিক আমাদের কারখানার মতোই, সেটআর্টলিস্ট, গেটআরটিস্ট, এবং কলআইটিউনস যে কোনও কন্ট্রোলারে আমরা মাই সার্ভিসটিতে যাব তা উপলব্ধ থাকবে। এখানে মাই সার্ভিস নিয়ন্ত্রক (যা আমাদের ফ্যাক্টরি নিয়ামকের মতো প্রায় একই)
app.controller('myServiceCtrl', function($scope, myService){
$scope.data = {};
$scope.updateArtist = function(){
myService.setArtist($scope.data.artist);
};
$scope.submitArtist = function(){
myService.callItunes()
.then(function(data){
$scope.data.artistData = data;
}, function(data){
alert(data);
})
}
});
আমি আগে যেমন উল্লেখ করেছি, একবার আপনি সত্যিই 'নতুন' কী করে তা বুঝতে পারার পরে, পরিষেবাগুলি অ্যাঙ্গুলারজেএস-এর কারখানার প্রায় একইরকম।
3) সরবরাহকারী
সরবরাহকারীদের সম্পর্কে মনে রাখা সবচেয়ে বড় বিষয়টি হ'ল তারা হ'ল একমাত্র পরিষেবা যা আপনি আপনার অ্যাপ্লিকেশনটির অ্যাপ্লিকেশন কনফিগ অংশে যেতে পারেন। আপনার অ্যাপ্লিকেশনের অন্য কোথাও উপলভ্য হওয়ার আগে আপনার যদি আপনার পরিষেবা অবজেক্টের কিছু অংশ পরিবর্তন করার প্রয়োজন হয় তবে এটি অত্যন্ত গুরুত্বপূর্ণ। যদিও পরিষেবাদি / কারখানার সাথে খুব মিল, তবে কয়েকটি পার্থক্য রয়েছে যা আমরা আলোচনা করব।
প্রথমে আমরা আমাদের সরবরাহকারীটিকে আমাদের পরিষেবা এবং কারখানার সাথে একইভাবে সেট আপ করেছি। নীচে ভেরিয়েবলগুলি আমাদের 'ব্যক্তিগত' এবং সহায়তা ফাংশন।
app.provider('myProvider', function(){
var baseUrl = 'https://itunes.apple.com/search?term=';
var _artist = '';
var _finalUrl = '';
//Going to set this property on the config function below.
this.thingFromConfig = ‘’;
var makeUrl = function(){
_artist = _artist.split(' ').join('+');
_finalUrl = baseUrl + _artist + '&callback=JSON_CALLBACK'
return _finalUrl;
}
}
* আবার যদি উপরের কোডের কোনও অংশ বিভ্রান্তিকর হয় তবে ফ্যাক্টরি বিভাগটি পরীক্ষা করে দেখুন যেখানে আমি ব্যাখ্যা করি যে এটি সমস্ত কি এটি আরও বেশি বিশদ করে।
আপনি সরবরাহকারীদের তিনটি বিভাগ বলে মনে করতে পারেন। প্রথম বিভাগটি হ'ল 'ব্যক্তিগত' ভেরিয়েবল / ফাংশন যা পরে পরিবর্তিত / সেট করা হবে (উপরে দেখানো হয়েছে)। দ্বিতীয় বিভাগটি হল এমন ভেরিয়েবল / ফাংশন যা আপনার অ্যাপ.config ফাংশনে উপলভ্য হবে এবং অন্য কোথাও উপলভ্য হওয়ার আগে এটি পরিবর্তন করার জন্য উপলব্ধ (উপরেও দেখানো হয়েছে)। এই ভেরিয়েবলগুলি 'এই' কীওয়ার্ডের সাথে সংযুক্ত করা দরকার তা লক্ষ করা গুরুত্বপূর্ণ। আমাদের উদাহরণস্বরূপ, অ্যাপ্লিকেশন-কনফিগটিতে পরিবর্তনের জন্য কেবলমাত্র 'জিনিস ফ্রমকনফিগ' উপলব্ধ থাকবে। তৃতীয় বিভাগ (নীচে দেখানো হয়েছে) এমন সমস্ত পরিবর্তনশীল / ফাংশন যা আপনার নিয়ামকটিতে যখন আপনি 'মাইপ্রোভাইডার' পরিষেবাটি নির্দিষ্ট কন্ট্রোলারে প্রবেশ করবেন তখন তা উপলব্ধ থাকবে।
সরবরাহকারীর সাথে পরিষেবা তৈরি করার সময়, আপনার নিয়ামকটিতে কেবলমাত্র বৈশিষ্ট্য / পদ্ধতিগুলি পাওয়া যাবে সেগুলি হ'ল properties get () ফাংশন থেকে ফিরে আসা বৈশিষ্ট্য / পদ্ধতিগুলি। নীচের কোডগুলি "এই" পেতে (যা আমরা জানি যে শেষ পর্যন্ত সেই ফাংশন থেকে ফিরে আসবে) রাখে। এখন, function ফাংশনটি আমাদের নিয়ামকটিতে যে সমস্ত পদ্ধতি / বৈশিষ্ট্যগুলি উপলভ্য হতে চায় তা প্রদান করে। এখানে একটি কোড উদাহরণ।
this.$get = function($http, $q){
return {
callItunes: function(){
makeUrl();
var deferred = $q.defer();
$http({
method: 'JSONP',
url: _finalUrl
}).success(function(data){
deferred.resolve(data);
}).error(function(){
deferred.reject('There was an error')
})
return deferred.promise;
},
setArtist: function(artist){
_artist = artist;
},
getArtist: function(){
return _artist;
},
thingOnConfig: this.thingFromConfig
}
}
এখন পুরো সরবরাহকারীর কোডটি এর মতো দেখাচ্ছে
app.provider('myProvider', function(){
var baseUrl = 'https://itunes.apple.com/search?term=';
var _artist = '';
var _finalUrl = '';
//Going to set this property on the config function below
this.thingFromConfig = '';
var makeUrl = function(){
_artist = _artist.split(' ').join('+');
_finalUrl = baseUrl + _artist + '&callback=JSON_CALLBACK'
return _finalUrl;
}
this.$get = function($http, $q){
return {
callItunes: function(){
makeUrl();
var deferred = $q.defer();
$http({
method: 'JSONP',
url: _finalUrl
}).success(function(data){
deferred.resolve(data);
}).error(function(){
deferred.reject('There was an error')
})
return deferred.promise;
},
setArtist: function(artist){
_artist = artist;
},
getArtist: function(){
return _artist;
},
thingOnConfig: this.thingFromConfig
}
}
});
এখন ঠিক যেমন আমাদের কারখানা ও পরিষেবাতে সেটআর্টিস্ট, গেটআরটিস্ট, এবং কলআইটিউনস আমরা মাইপ্রোভাইডারকে যে কোনও কন্ট্রোলারে যাব তা উপলব্ধ থাকবে। এখানে মাইপ্রোভাইডার নিয়ামক (যা আমাদের ফ্যাক্টরি / পরিষেবা নিয়ামকের মতো প্রায় একই)
app.controller('myProviderCtrl', function($scope, myProvider){
$scope.data = {};
$scope.updateArtist = function(){
myProvider.setArtist($scope.data.artist);
};
$scope.submitArtist = function(){
myProvider.callItunes()
.then(function(data){
$scope.data.artistData = data;
}, function(data){
alert(data);
})
}
$scope.data.thingFromConfig = myProvider.thingOnConfig;
});
পূর্বে উল্লিখিত হিসাবে, সরবরাহকারীর সাথে একটি পরিষেবা তৈরির পুরো পয়েন্টটি চূড়ান্ত অবজেক্টটি অ্যাপ্লিকেশনটির বাকি অংশে যাওয়ার আগে অ্যাপ.config ফাংশনের মাধ্যমে কিছু ভেরিয়েবল পরিবর্তন করতে সক্ষম হবে। এর একটি উদাহরণ দেখা যাক।
app.config(function(myProviderProvider){
//Providers are the only service you can pass into app.config
myProviderProvider.thingFromConfig = 'This sentence was set in app.config. Providers are the only service that can be passed into config. Check out the code to see how it works';
});
এখন আপনি দেখতে পাবেন যে কীভাবে 'প্রযোজ্য ফর্মকনফিগ' আমাদের সরবরাহকারীর মতো খালি স্ট্রিং, কিন্তু যখন এটি ডম-এ প্রদর্শিত হবে, তখন এটি হবে 'এই বাক্যটি সেট করা হয়েছিল ...'।
সমস্ত পরিষেবাদি সিঙ্গেলন ; তারা প্রতি অ্যাপ্লিকেশন একবার তাত্ক্ষণিকভাবে পেতে। এগুলি যে কোনও প্রকারের হতে পারে , তা সে আদিম, বস্তুর আক্ষরিক, ফাংশন, এমনকি কাস্টম ধরণের উদাহরণ হতে পারে।
value
, factory
, service
, constant
, এবং provider
পদ্ধতি সব প্রদানকারীর হয়। কীভাবে পরিষেবাগুলি তাত্পর্যপূর্ণ করা যায় সেগুলি তারা ইনজেক্টরকে শিখায়।
সর্বাধিক ভার্বোজ, তবে সবচেয়ে বিস্তৃত একটি হ'ল একটি সরবরাহকারী রেসিপি recipe অবশিষ্ট চারটি রেসিপি ধরনের - মূল্য, কারখানার, পরিষেবা এবং ধ্রুব - একটি প্রদানকারী রেসিপি উপরে মাত্র অন্বিত চিনি আছে ।
আপনার যখন সরবরাহকারী রেসিপিটি তখনই ব্যবহার করা উচিত যখন আপনি অ্যাপ্লিকেশন-বিস্তৃত কনফিগারেশনের জন্য একটি API প্রকাশ করতে চান যা অ্যাপ্লিকেশন শুরুর আগে তৈরি করতে হবে। এটি কেবলমাত্র পুনরায় ব্যবহারযোগ্য পরিষেবাগুলির জন্য আকর্ষণীয় যাঁর আচরণের মধ্যে অ্যাপ্লিকেশনগুলির মধ্যে কিছুটা ভিন্ন হতে পারে।
decorator
।অ্যাঙ্গুলারজেএস কারখানা, পরিষেবা এবং সরবরাহকারী বোঝা
এগুলি সবই পুনরায় ব্যবহারযোগ্য সিঙ্গলটন অবজেক্টগুলি ভাগ করতে ব্যবহৃত হয়। এটি আপনার অ্যাপ্লিকেশন / বিভিন্ন উপাদান / মডিউল জুড়ে পুনরায় ব্যবহারযোগ্য কোড ভাগ করতে সহায়তা করে।
দস্তাবেজ পরিষেবা / কারখানা থেকে :
- অলসভাবে তাত্ক্ষণিকভাবে - কোনও অ্যাপ্লিকেশন উপাদান এটির উপর নির্ভর করে যখন কৌনিকটি কেবল কোনও পরিষেবা / কারখানা ইনস্ট্যান্ট করে।
- সিলেটলেটস - একটি পরিষেবার উপর নির্ভরশীল প্রতিটি উপাদান পরিষেবা কারখানার দ্বারা উত্পন্ন একক উদাহরণের জন্য একটি রেফারেন্স পায়।
একটি ফ্যাক্টরি এমন ফাংশন যেখানে আপনি কোনও বস্তু তৈরির আগে যুক্তিগুলি পরিচালনা / যুক্ত করতে পারবেন, তারপরে সদ্য নির্মিত বস্তুটি ফিরে আসবে।
app.factory('MyFactory', function() {
var serviceObj = {};
//creating an object with methods/functions or variables
serviceObj.myFunction = function() {
//TO DO:
};
//return that object
return serviceObj;
});
ব্যবহার
এটি ক্লাসের মতো কেবল ফাংশনগুলির সংগ্রহ হতে পারে। অতএব, আপনি যখন এটি আপনার নিয়ামক / কারখানা / নির্দেশক ক্রিয়াকলাপগুলিতে ইনজেকশন দিচ্ছেন তখন এটি বিভিন্ন নিয়ামকগুলিতে ইনস্ট্যান্ট করা যেতে পারে। এটি প্রতি অ্যাপ্লিকেশনটিতে একবার একবার ইনস্ট্যান্ট হয়।
কেবল পরিষেবাগুলি দেখার সময় অ্যারে প্রোটোটাইপ সম্পর্কে ভাবেন। একটি পরিষেবা একটি ফাংশন যা 'নতুন' কীওয়ার্ড ব্যবহার করে কোনও নতুন অবজেক্টকে ইনস্ট্যান্ট করে। আপনি this
কীওয়ার্ডটি ব্যবহার করে কোনও পরিষেবা সামগ্রীতে বৈশিষ্ট্য এবং ফাংশন যুক্ত করতে পারেন । কারখানার মতো নয়, এটি কোনও কিছু ফেরত দেয় না (এটি এমন কোনও জিনিস দেয় যা পদ্ধতি / বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে)।
app.service('MyService', function() {
//directly binding events to this context
this.myServiceFunction = function() {
//TO DO:
};
});
ব্যবহার
আপনি যখন অ্যাপ্লিকেশন জুড়ে একটি একক বস্তু ভাগ করতে হবে এটি ব্যবহার করুন। উদাহরণস্বরূপ, প্রমাণীকৃত ব্যবহারকারীর বিবরণ, ভাগ-সক্ষম পদ্ধতি / ডেটা, ইউটিলিটি ফাংশন ইত্যাদি
একটি সরবরাহকারী একটি কনফিগারযোগ্য পরিষেবা অবজেক্ট তৈরি করতে ব্যবহৃত হয়। আপনি কনফিগার ফাংশন থেকে পরিষেবা সেটিংস কনফিগার করতে পারেন। এটি ফাংশনটি ব্যবহার করে একটি মান ফেরত $get()
দেয়। $get
ফাংশন কৌণিক চালান ফেজ উপর মৃত্যুদন্ড কার্যকর হয়।
app.provider('configurableService', function() {
var name = '';
//this method can be be available at configuration time inside app.config.
this.setName = function(newName) {
name = newName;
};
this.$get = function() {
var getName = function() {
return name;
};
return {
getName: getName //exposed object to where it gets injected.
};
};
});
ব্যবহার
যখন আপনার পরিষেবা অবজেক্টটি উপলব্ধ করার আগে মডিউল-ভিত্তিক কনফিগারেশন সরবরাহ করতে হবে, যেমন। তোমার মত আপনার পরিবেশ ভিত্তিতে আপনার এপিআই URL টি সেট করতে চান অনুমান dev
, stage
বাprod
বিঃদ্রঃ
কেবল সরবরাহকারীর কৌনিক কনফিগার পর্যায়ে উপলব্ধ থাকবে, যখন পরিষেবা এবং কারখানাটি নেই।
আশা করি এটি কারখানা, পরিষেবা এবং সরবরাহকারী সম্পর্কে আপনার বোঝাপড়া পরিষ্কার করেছে ।
only when you want to expose an API for application-wide configuration that must be made before the application starts. This is usually interesting only for reusable services whose behavior might need to vary slightly between applications
, তাই সম্ভব হচ্ছে না, তাই না?
আমার জন্য, ওহী এসেছিল যখন আমি বুঝতে পেরেছিলাম যে তারা সবাই একইভাবে কাজ করে: একবার কিছু চালিয়ে , তারা যে মূল্য পায় তা সঞ্চয় করে এবং তারপরে নির্ভরতা ইনজেকশনের মাধ্যমে রেফারেন্স করা হলে একই স্টোরেজ মানটি কাশি করে up ।
বলুন আমাদের আছে:
app.factory('a', fn);
app.service('b', fn);
app.provider('c', fn);
তিনটির মধ্যে পার্থক্য হ'ল:
a
এর সঞ্চিত মান চলমান থেকে আসে fn
।b
এর সঞ্চিত মান new
আইএনজি থেকে আসেfn
।c
এর সঞ্চিত মানটি প্রথমে new
আইএনএন দিয়ে উদাহরণ পাওয়া fn
এবং তারপরে $get
উদাহরণটির কোনও পদ্ধতি চালানো থেকে আসে ।যার অর্থ অ্যাঙ্গুলারজেএস-এর অভ্যন্তরে ক্যাশে অবজেক্টের মতো কিছু রয়েছে, যার প্রতিটি ইঞ্জেকশনের মান কেবল একবার নির্ধারিত হয়, যখন তারা প্রথমবার ইনজেকশন দেওয়া হয়েছিল এবং কোথায়:
cache.a = fn()
cache.b = new fn()
cache.c = (new fn()).$get()
এই কারণেই আমরা this
পরিষেবাগুলিতে ব্যবহার করি এবং একটি this.$get
সরবরাহকারীকে সংজ্ঞায়িত করি ।
factory
এস দিয়ে ভাল করছেন । service
কফির স্ক্রিপ্ট, টাইপসক্রিপ্ট, ইএস like ইত্যাদি ইত্যাদির একমাত্র কারণগুলির কারণগুলি আপনি তাদের শ্রেণি বাক্য গঠন ব্যবহার করতে পারেন। provider
আপনার মডিউলটি যদি বিভিন্ন অ্যাপ্লিকেশনে বিভিন্ন সেটিংস সহ বিভিন্ন অ্যাপ্লিকেশন ব্যবহার করে ব্যবহৃত হয় তবেই আপনার প্রয়োজন app.config()
। যদি আপনার পরিষেবাটি খাঁটি সিঙ্গলটন হয় বা কোনও কিছুর উদাহরণ তৈরি করতে সক্ষম হয় তবে এটি কেবল আপনার প্রয়োগের উপর নির্ভর করে।
পরিষেবা বনাম সরবরাহকারী বনাম কারখানা:
আমি এটি সহজ রাখার চেষ্টা করছি। এটি সমস্ত বেসিক জাভাস্ক্রিপ্ট ধারণা সম্পর্কে।
প্রথমত, আসুন AngularJS- এ পরিষেবাগুলি সম্পর্কে কথা বলি !
পরিষেবাটি কী: কৌনিক জেএসে, পরিষেবাতেসিঙ্গলটন জাভাস্ক্রিপ্ট অবজেক্ট ছাড়া কিছু নয় যা কিছু দরকারী পদ্ধতি বা বৈশিষ্ট্য সংরক্ষণ করতে পারে। এই সিঙ্গলটন অবজেক্টটি এনজিএপি (অ্যাঙ্গুলার অ্যাপ) ভিত্তিতে তৈরি করা হয়েছে এবং এটি বর্তমান অ্যাপের মধ্যে থাকা সমস্ত কন্ট্রোলারের মধ্যে ভাগ করা আছে। যখন Angularjs কোনও পরিষেবা অবজেক্ট ইনস্ট্যান্ট করে, এটি একটি অনন্য পরিষেবা নামের সাথে এই পরিষেবা অবজেক্টটিকে নিবন্ধভুক্ত করে। সুতরাং প্রতিবার যখন আমাদের পরিষেবা উদাহরণের প্রয়োজন হয় তখন কৌনিক এই পরিষেবা নামের জন্য রেজিস্ট্রি সন্ধান করে এবং এটি পরিষেবা অবজেক্টের রেফারেন্স দেয়। এমন যে আমরা পরিষেবা অবজেক্টে পদ্ধতি, অ্যাক্সেসের বৈশিষ্ট্য ইত্যাদি শুরু করতে পারি। আপনার প্রশ্ন থাকতে পারে আপনি নিয়ন্ত্রণকারীদের স্কোপ অবজেক্টে সম্পত্তি, পদ্ধতিও রাখতে পারেন কিনা! তাহলে আপনার কেন পরিষেবা অবজেক্টের দরকার? উত্তরগুলি হল: একাধিক নিয়ামক সুযোগের মধ্যে পরিষেবাগুলি ভাগ করা হয়। আপনি যদি কোনও নিয়ন্ত্রণকারীর স্কোপ অবজেক্টে কিছু বৈশিষ্ট্য / পদ্ধতি রাখেন তবে তা কেবল বর্তমান স্কোপে উপলব্ধ।
সুতরাং যদি তিনটি কন্ট্রোলার সুযোগ থাকে তবে এটি নিয়ামকএ, কন্ট্রোলারবি এবং কন্ট্রোলারসি হতে দিন, সকলেই একই পরিষেবা উদাহরণ ভাগ করে নেবে।
<div ng-controller='controllerA'>
<!-- controllerA scope -->
</div>
<div ng-controller='controllerB'>
<!-- controllerB scope -->
</div>
<div ng-controller='controllerC'>
<!-- controllerC scope -->
</div>
কীভাবে একটি পরিষেবা তৈরি করবেন?
AngularJS একটি পরিষেবা নিবন্ধনের জন্য বিভিন্ন পদ্ধতি সরবরাহ করে। এখানে আমরা তিনটি পদ্ধতির কারখানায় মনোনিবেশ করব (..), পরিষেবা (..), সরবরাহকারী (..);
কোড রেফারেন্সের জন্য এই লিঙ্কটি ব্যবহার করুন
আমরা নীচে হিসাবে একটি কারখানা ফাংশন সংজ্ঞায়িত করতে পারেন।
factory('serviceName',function fnFactory(){ return serviceInstance;})
AngularJS প্রদান করে 'কারখানা (' SERVICENAME ', fnFactory)' পদ্ধতি যা দুই প্যারামিটার হয়, SERVICENAME এবং জাভাস্ক্রিপ্ট ফাংশন লাগে। কৌনিকটি নীচের মতো ফাংশন ফিনফ্যাক্ট্রি () ব্যবহার করে পরিষেবা উদাহরণ তৈরি করে।
var serviceInstace = fnFactory();
পাস করা ফাংশন কোনও অবজেক্টকে সংজ্ঞায়িত করতে পারে এবং সেই বস্তুটি ফিরিয়ে দিতে পারে। AngularJS সহজেই এই অবজেক্টের রেফারেন্সটি একটি ভেরিয়েবলের কাছে সংরক্ষণ করে যা প্রথম যুক্তি হিসাবে পাস করা হয়। এফএনফ্যাক্টরি থেকে যা কিছু ফেরত আসবে তা সার্ভিস ইনস্ট্যান্সে আবদ্ধ থাকবে। প্রত্যাবর্তন অবজেক্টের পরিবর্তে, আমরা ফাংশন, মান ইত্যাদিও ফিরিয়ে দিতে পারি, যা কিছু আমরা ফিরে আসব সেবার দৃষ্টান্ত উপলব্ধ থাকবে।
উদাহরণ:
var app= angular.module('myApp', []);
//creating service using factory method
app.factory('factoryPattern',function(){
var data={
'firstName':'Tom',
'lastName':' Cruise',
greet: function(){
console.log('hello!' + this.firstName + this.lastName);
}
};
//Now all the properties and methods of data object will be available in our service object
return data;
});
service('serviceName',function fnServiceConstructor(){})
এটি অন্য উপায়, আমরা একটি পরিষেবা নিবন্ধন করতে পারি। একমাত্র পার্থক্যটি হল AngularJS যেভাবে পরিষেবা অবজেক্টটি ইনস্ট্যান্ট করার চেষ্টা করে। এবার কৌণিক 'নতুন' কীওয়ার্ড ব্যবহার করে এবং কনস্ট্রাক্টর ফাংশনটিকে নীচের মতো কিছু বলে।
var serviceInstance = new fnServiceConstructor();
কনস্ট্রাক্টর ফাংশনে আমরা পরিষেবা বস্তুতে বৈশিষ্ট্য / পদ্ধতি যুক্ত করার জন্য 'এই' কীওয়ার্ডটি ব্যবহার করতে পারি। উদাহরণ:
//Creating a service using the service method
var app= angular.module('myApp', []);
app.service('servicePattern',function(){
this.firstName ='James';
this.lastName =' Bond';
this.greet = function(){
console.log('My Name is '+ this.firstName + this.lastName);
};
});
সরবরাহকারী () ফাংশন পরিষেবা তৈরির অন্য উপায়। আসুন আমরা এমন একটি পরিষেবা তৈরি করতে আগ্রহী যেটি কেবল ব্যবহারকারীকে কিছু শুভেচ্ছা বার্তা প্রদর্শন করে। তবে আমরা এমন একটি কার্যকারিতা সরবরাহ করতে চাই যে ব্যবহারকারী তাদের নিজস্ব শুভেচ্ছা বার্তা সেট করতে পারেন। প্রযুক্তিগত দিক থেকে আমরা কনফিগারযোগ্য পরিষেবা তৈরি করতে চাই। এটা আমরা কিভাবে করতে পারি ? অবশ্যই একটি উপায় থাকতে হবে, যাতে অ্যাপ্লিকেশনটি তাদের কাস্টম গ্রিটিং বার্তাগুলি পাস করতে পারে এবং অ্যাঙ্গুলারজগুলি এটি আমাদের ফ্যাক্টরি / কনস্ট্রাক্টর ফাংশনে উপলব্ধ করতে পারে যা আমাদের পরিষেবাগুলির উদাহরণ তৈরি করে। যেমন একটি ক্ষেত্রে সরবরাহকারী () ফাংশন কাজ। সরবরাহকারী () ফাংশন ব্যবহার করে আমরা কনফিগারযোগ্য পরিষেবা তৈরি করতে পারি।
নীচের মত আমরা সরবরাহকারী বাক্য গঠন ব্যবহার করে কনফিগারযোগ্য পরিষেবা তৈরি করতে পারি।
/*step1:define a service */
app.provider('service',function serviceProviderConstructor(){});
/*step2:configure the service */
app.config(function configureService(serviceProvider){});
1. সরবরাহকারী অবজেক্টটি আমরা আমাদের সরবরাহকারীর ফাংশনে সংজ্ঞায়িত কনস্ট্রাক্টর ফাংশন ব্যবহার করে তৈরি করি।
var serviceProvider = new serviceProviderConstructor();
২. আমরা যে ফাংশনটি app.config () এ পাস করেছি, তা কার্যকর করা হবে। এটিকে কনফিগার ফেজ বলা হয় এবং এখানে আমাদের পরিষেবাটি কাস্টমাইজ করার সুযোগ রয়েছে।
configureService(serviceProvider);
৩. সর্বশেষে সার্ভিস উদাহরণটি সার্ভিসপ্রোডাইভারের পদ্ধতিটি পান কল করে তৈরি করা হয়।
serviceInstance = serviceProvider.$get()
var app= angular.module('myApp', []);
app.provider('providerPattern',function providerConstructor(){
//this function works as constructor function for provider
this.firstName = 'Arnold ';
this.lastName = ' Schwarzenegger' ;
this.greetMessage = ' Welcome, This is default Greeting Message' ;
//adding some method which we can call in app.config() function
this.setGreetMsg = function(msg){
if(msg){
this.greetMessage = msg ;
}
};
//We can also add a method which can change firstName and lastName
this.$get = function(){
var firstName = this.firstName;
var lastName = this.lastName ;
var greetMessage = this.greetMessage;
var data={
greet: function(){
console.log('hello, ' + firstName + lastName+'! '+ greetMessage);
}
};
return data ;
};
});
app.config(
function(providerPatternProvider){
providerPatternProvider.setGreetMsg(' How do you do ?');
}
);
সারসংক্ষেপ:
কারখানায় কোনও ফ্যাক্টরি ফাংশন ব্যবহার করা হয় যা কোনও পরিষেবার উদাহরণ দেয়। serviceInstance = fnFactory ();
পরিষেবাটি কনস্ট্রাক্টর ফাংশন ব্যবহার করে এবং কৌনিকটি পরিষেবাটির উদাহরণ তৈরির জন্য 'নতুন' কীওয়ার্ড ব্যবহার করে এই নির্মাণকারী ফাংশনটি আহ্বান করে। serviceInstance = নতুন fnServiceConstructor ();
সরবরাহকারী একটি সরবরাহকারী কনস্ট্রাক্টর ফাংশন সংজ্ঞায়িত করে, এই সরবরাহকারী কনস্ট্রাক্টর ফাংশন একটি কারখানার ফাংশন সংজ্ঞায়িত করে । পেতে । কৌণিক কলগুলি পরিষেবা অবজেক্ট তৈরি করতে $ get () করুন। সরবরাহকারীর সিনট্যাক্সটি ইনস্ট্যান্ট হওয়ার আগে পরিষেবা অবজেক্টটি কনফিগার করার একটি অতিরিক্ত সুবিধা রয়েছে। serviceInstance = $ get ();
এখানে বেশ কয়েকটি ব্যক্তি সঠিকভাবে একটি ফ্যাক্টরি, সরবরাহকারী, পরিষেবা এবং এমনকি মান এবং ধ্রুবক হিসাবে চিহ্নিত করেছেন একই জিনিস versions আপনি সেগুলির মধ্যে আরও সাধারণ বিচ্ছিন্ন করতে পারেন provider
। তাই ভালো:
এই চিত্রটি থেকে নিবন্ধটি এখানে:
আপনি অ্যাংুলারজেএসকে একটি ফাংশন দেন, কারখানার অনুরোধ করা হলে অ্যাংুলারজেএস ক্যাশে এবং রিটার্ন মানটি ইনজেক্ট করে।
উদাহরণ:
app.factory('factory', function() {
var name = '';
// Return value **is** the object that will be injected
return {
name: name;
}
})
ব্যবহার:
app.controller('ctrl', function($scope, factory) {
$scope.name = factory.name;
});
আপনি AngularJS কে একটি ফাংশন দেন, AngularJS এটিকে ইনস্ট্যান্ট করতে নতুন কল করবে। এটি উদাহরণস্বরূপ যে AngularJS তৈরি করে যা পরিষেবাটি অনুরোধ করা হলে ক্যাশে এবং ইনজেকশনের ব্যবস্থা করা হবে। যেহেতু নতুন সেবা instantiate ব্যবহৃত হয়, অভিব্যক্তি এই বৈধ এবং উদাহরণস্বরূপ বোঝায়।
উদাহরণ:
app.service('service', function() {
var name = '';
this.setName = function(newName) {
name = newName;
}
this.getName = function() {
return name;
}
});
ব্যবহার:
app.controller('ctrl', function($scope, service) {
$scope.name = service.getName();
});
আপনি AngularJS কে একটি ফাংশন দেন এবং AngularJS এর $get
ফাংশনটি কল করবে । $get
পরিষেবাটি অনুরোধ করা হলে এটি ফাংশন থেকে ফেরত মান যা ক্যাশে এবং ইনজেকশনের ব্যবস্থা করা হবে।
অ্যাঙ্গুলারজেএস সংক্রামক হওয়ার জন্য $get
পদ্ধতিটি কল করার আগে সরবরাহকারীরা আপনাকে সরবরাহকারীকে কনফিগার করতে দেয় ।
উদাহরণ:
app.provider('provider', function() {
var name = '';
this.setName = function(newName) {
name = newName;
}
this.$get = function() {
return {
name: name
}
}
})
ব্যবহার (একটি নিয়ামক ইনজেকশন হিসাবে)
app.controller('ctrl', function($scope, provider) {
$scope.name = provider.name;
});
ব্যবহার (আগে সরবরাহকারীর কনফিগারেশন $get
ইনজেক্টেবল তৈরি করতে বলা হয়)
app.config(function(providerProvider) {
providerProvider.setName('John');
});
সরবরাহকারীদের সাথে চারপাশে খেলা করার সময় আমি আকর্ষণীয় কিছু লক্ষ্য করেছি।
ইনজেকটেবলের দৃশ্যমানতা পরিষেবা এবং কারখানার তুলনায় সরবরাহকারীর পক্ষে আলাদা। যদি আপনি একটি কৌণিক জেএস "ধ্রুবক" (উদাহরণস্বরূপ myApp.constant('a', 'Robert');
) ঘোষণা করেন তবে আপনি এটি পরিষেবা, কারখানা এবং সরবরাহকারীগুলিতে ইনজেকশন করতে পারেন।
তবে আপনি যদি একটি কৌণিক জেএস "মান" (উদাহরণস্বরূপ,, myApp.value('b', {name: 'Jones'});
) ঘোষণা করেন তবে আপনি এটিকে পরিষেবা এবং কারখানায় ইনজেক্ট করতে পারেন, তবে সরবরাহকারী তৈরির ফাংশনে নয়। আপনি তবে $get
আপনার সরবরাহকারীর জন্য যে ফাংশনটি নির্ধারণ করেছেন তাতে এটি ইনজেক্ট করতে পারেন । এটি AngularJS ডকুমেন্টেশনে উল্লেখ করা হয়েছে, তবে এটি মিস করা সহজ। মান এবং ধ্রুবক পদ্ধতির বিভাগগুলিতে আপনি এটি% সরবরাহ পৃষ্ঠায় খুঁজে পেতে পারেন।
<div ng-app="MyAppName">
<div ng-controller="MyCtrl">
<p>from Service: {{servGreet}}</p>
<p>from Provider: {{provGreet}}</p>
</div>
</div>
<script>
var myApp = angular.module('MyAppName', []);
myApp.constant('a', 'Robert');
myApp.value('b', {name: 'Jones'});
myApp.service('greetService', function(a,b) {
this.greeter = 'Hi there, ' + a + ' ' + b.name;
});
myApp.provider('greetProvider', function(a) {
this.firstName = a;
this.$get = function(b) {
this.lastName = b.name;
this.fullName = this.firstName + ' ' + this.lastName;
return this;
};
});
function MyCtrl($scope, greetService, greetProvider) {
$scope.servGreet = greetService.greeter;
$scope.provGreet = greetProvider.fullName;
}
</script>
এটি নবজাতকের পক্ষে খুব বিভ্রান্তিকর অংশ এবং আমি এটি সহজ কথায় পরিষ্কার করার চেষ্টা করেছি
অ্যাঙ্গুলারজেএস পরিষেবা: নিয়ামকটিতে পরিষেবার রেফারেন্সের সাথে ইউটিলিটি ফাংশনগুলি ভাগ করে নেওয়ার জন্য ব্যবহৃত হয়। পরিষেবা প্রকৃতিতে সিঙ্গলটন তাই এক পরিষেবার জন্য ব্রাউজারে কেবল একটি উদাহরণ তৈরি করা হয় এবং একই পৃষ্ঠাগুলিতে একই রেফারেন্স ব্যবহৃত হয়।
পরিষেবাটিতে, আমরা এই বস্তুর সাথে সম্পত্তি হিসাবে ফাংশন নাম তৈরি করি ।
অ্যাঙ্গুলারজেএস ফ্যাক্টরি: কারখানার উদ্দেশ্যও পরিষেবা হিসাবে একই তবে এই ক্ষেত্রে আমরা একটি নতুন অবজেক্ট তৈরি করি এবং এই বস্তুর বৈশিষ্ট্য হিসাবে ফাংশন যুক্ত করি এবং শেষে আমরা এই বস্তুকে ফিরে পাই।
কৌণিক জেএস সরবরাহকারী: এর উদ্দেশ্য আবার একই same তবে প্রদানকারীর এর ফল। Get ফাংশন দেয় $
পরিষেবাদি, কারখানা ও সরবরাহকারীর সংজ্ঞা এবং ব্যবহারের বিষয়টি http://www.dotnetfunda.com/articles/show/3156/differences-between-angularjs-service-factory- and-provider- এ ব্যাখ্যা করা হয়েছে
আমার পক্ষে পার্থক্যটি বোঝার সর্বোত্তম এবং সহজ উপায় হ'ল:
var service, factory;
service = factory = function(injection) {}
অ্যাঙ্গুলারজেএস কীভাবে নির্দিষ্ট উপাদানগুলিকে ইনস্ট্যান্ট করে (সরলীকৃত):
// service
var angularService = new service(injection);
// factory
var angularFactory = factory(injection);
সুতরাং, পরিষেবার জন্য, যা AngularJS উপাদান হয়ে যায় তা হ'ল শ্রেণীর অবজেক্ট দৃষ্টান্ত যা পরিষেবা ঘোষণার ফাংশন দ্বারা প্রতিনিধিত্ব করা হয়। কারখানার জন্য, এটি কারখানার ঘোষণা ফাংশন থেকে ফিরে আসা ফলাফল। কারখানাটি সেবার মতো আচরণ করতে পারে:
var factoryAsService = function(injection) {
return new function(injection) {
// Service content
}
}
সহজ চিন্তার উপায় নিম্নলিখিতটি:
ফ্যাক্টরি 'শ্রেণি' উদাহরণ চারপাশের মন্তব্যে সরবরাহ করা হয়, পাশাপাশি সরবরাহকারীর পার্থক্য।
new MyService()
বা কিছু করতে সক্ষম হবেন বলে আশা করছিলাম :)
এই বিষয়ে আমার স্পষ্টতা:
মূলত উল্লিখিত সমস্ত ধরণের (পরিষেবাদি, কারখানা, সরবরাহকারী ইত্যাদি) কেবলমাত্র বিশ্বব্যাপী ভেরিয়েবলগুলি তৈরি এবং কনফিগার করছে (এটি অবশ্যই পুরো প্রয়োগের ক্ষেত্রে বৈশ্বিক) ঠিক যেমন পুরানো ফ্যাশনযুক্ত বৈশ্বিক চলক ছিল ables
যদিও বৈশ্বিক ভেরিয়েবলগুলি প্রস্তাবিত নয়, তবে এই গ্লোবাল ভেরিয়েবলগুলির আসল ব্যবহার হ'ল নির্ভরশীলতা নিয়ন্ত্রকের কাছে ভেরিয়েবল পাস করে নির্ভরতা ইনজেকশন সরবরাহ করা ।
"গ্লোবাল ভেরিয়েবল" এর মান তৈরিতে বিভিন্ন স্তরের জটিলতা রয়েছে:
app.config
।
app.config
ফাইলের মাধ্যমে সেট করার পরে অ্যাংুলারজেএস দ্বারা সম্পাদন করা হয় এবং এই $ .get ফাংশনটি কারখানার মতোই আচরণ করে উপরের দিকে, এর রিটার্ন মানটি "গ্লোবাল" ভেরিয়েবলগুলি আরম্ভ করার জন্য ব্যবহৃত হয়। আমার বোঝার নীচে খুব সহজ।
কারখানা: আপনি কেবল কারখানার অভ্যন্তর কোনও বস্তু তৈরি করে তা ফিরিয়ে দিন।
সার্ভিস:
আপনার কেবলমাত্র একটি স্ট্যান্ডার্ড ফাংশন রয়েছে যা কোনও ফাংশন সংজ্ঞায়িত করতে এই কীওয়ার্ডটি ব্যবহার করে।
প্রদানকারী:
এমন একটি $get
বস্তু রয়েছে যা আপনি সংজ্ঞায়িত করেন এবং এটি অবজেক্টটি ডেটা ফেরত পেতে ব্যবহার করা যেতে পারে।
কৌণিক ডক্স থেকে সংক্ষিপ্তসার :
এসও থেকে সেরা উত্তর:
https://stackoverflow.com/a/26924234/165673 (<- GOOD)
https://stackoverflow.com/a/27263882/165673
https://stackoverflow.com/a/16566144/165673
ইতিমধ্যে সমস্ত ভাল উত্তর। আমি পরিষেবা এবং কারখানায় আরও কয়েকটি পয়েন্ট যুক্ত করতে চাই । পরিষেবা / কারখানার মধ্যে পার্থক্য সহ। এবং কারওর মতো প্রশ্নও থাকতে পারে:
পরিষেবা এবং কারখানার মধ্যে পার্থক্য দিয়ে শুরু করা যাক:
উভয়ই সিঙ্গেলন : যখনই কৌণিক প্রথমবার এটিকে নির্ভরতা হিসাবে আবিষ্কার করে, এটি পরিষেবা / কারখানার একক উদাহরণ তৈরি করে। উদাহরণটি তৈরি হয়ে গেলে, একই উদাহরণ চিরকালের জন্য ব্যবহৃত হয়।
আচরণের সাথে কোনও বস্তুর মডেল করতে ব্যবহার করা যেতে পারে : এগুলির উভয়ই পদ্ধতি, অভ্যন্তরীণ রাষ্ট্র পরিবর্তনশীল এবং আরও কিছু থাকতে পারে। যদিও আপনি সেই কোডটি লেখার পদ্ধতিটি আলাদা হবে।
সেবা:
একটি পরিষেবাদি একটি কনস্ট্রাক্টর ফাংশন, এবং কৌনিকটি এটি নতুন কল করে তা ইনস্ট্যান্ট করে দেবে yourServiceName()
। এর অর্থ কয়েকটি জিনিস।
this
।new yourServiceName(
), এটি আপনার দেওয়া this
সমস্ত বৈশিষ্ট্যগুলির সাথে এটি বস্তুটি গ্রহণ করবে।উদাহরণ উদাহরণ:
angular.service('MyService', function() {
this.aServiceVariable = "Ved Prakash"
this.aServiceMethod = function() {
return //code
};
});
যখন কৌণিক এই
MyService
পরিষেবাটিকে নির্ভর করে এমন একটি নিয়ামক হিসাবে সংযুক্ত করে, তখন সেই নিয়ামক এমন একটি পাবেনMyService
যা এটি ফাংশনগুলিতে কল করতে পারে, যেমন মাই সার্ভিস.এএসওয়ারস্মিথড ()।
সাবধানthis
:
যেহেতু তৈরি পরিষেবাটি একটি অবজেক্ট তাই এর অভ্যন্তরীণ পদ্ধতিগুলি যখন তাদের ডাকা হয় তখন এটি উল্লেখ করতে পারে:
angular.service('ScoreKeeper', function($http) {
this.score = 0;
this.getScore = function() {
return this.score;
};
this.setScore = function(newScore) {
this.score = newScore;
};
this.addOne = function() {
this.score++;
};
});
আপনাকে কল করার প্রলুব্ধ করা যেতে পারে ScoreKeeper.setScore
, একটি প্রতিশ্রুতি চেন উদাহরণস্বরূপ যদি আপনি এটি সার্ভার থেকে দখল করে স্কোর সক্রিয়া: $http.get('/score').then(ScoreKeeper.setScore).
এই সঙ্গে ঝামেলায় যে ScoreKeeper.setScore
সঙ্গে বলা হবে this
আবদ্ধ null
এবং আপনি ত্রুটি পাবেন। আরও ভাল উপায় হবে $http.get('/score').then(ScoreKeeper.setScore.bind(ScoreKeeper))
। আপনি আপনার পরিষেবা পদ্ধতিতে এটি ব্যবহার করা চয়ন করুন বা না করুন, কীভাবে আপনি এগুলি ডাকেন সে সম্পর্কে সতর্ক থাকুন।
একটি থেকে একটি মান ফেরত দেওয়াService
:
জাভাস্ক্রিপ্ট কনস্ট্রাক্টররা কীভাবে কাজ করে তার কারণে আপনি যদি (i.e., an Object)
কোনও constructor
ফাংশন থেকে কোনও জটিল মান ফিরিয়ে দেন, কলকারী এই দৃষ্টান্তটির পরিবর্তে সেই বস্তুটি পাবেন।
এর অর্থ হ'ল আপনি নীচে থেকে কারখানার উদাহরণটি মূলত কপি-পেস্ট করতে পারেন, এর সাথে প্রতিস্থাপন factory
করতে পারেন service
এবং এটি কার্যকর হবে:
angular.service('MyService', function($http) {
var api = {};
api.aServiceMethod= function() {
return $http.get('/users');
};
return api;
});
সুতরাং যখন কৌনিক আপনার পরিষেবাটি নতুন মাই সার্ভিস () দিয়ে তৈরি করবে, তখন এটি মাই সার্ভিস উদাহরণের পরিবর্তে সেই এপিআই বস্তুটি পেয়ে যাবে।
এটি কোনও জটিল মানের জন্য আচরণ (বস্তু, ফাংশন) তবে আদিম ধরণের নয়।
কারখানা:
একটি কারখানা একটি সাধারণ পুরানো ফাংশন যা কোনও মান দেয়। রিটার্ন মান হ'ল যা কারখানার উপর নির্ভর করে এমন জিনিসগুলিতে ইনজেকশনে পরিণত হয়। কৌণিক একটি সাধারণ কারখানার প্যাটার্ন হ'ল বৈশিষ্ট্য হিসাবে ফাংশন সহ কোনও বস্তুটি ফেরত দেওয়া:
angular.factory('MyFactory', function($http) {
var api = {};
api.aFactoryMethod= function() {
return $http.get('/users');
};
return api;
});
কারখানার নির্ভরতার জন্য ইঞ্জেকশনের মান হ'ল কারখানার রিটার্ন মান, এবং এটি কোনও বস্তু হতে হবে না। এটি একটি ফাংশন হতে পারে
উপরে 1 এবং 2 টি প্রশ্নের উত্তর:
বেশিরভাগ অংশে, প্রতিটি কিছুর জন্য কেবল কারখানাগুলি ব্যবহার করে আটকে দিন। তাদের আচরণ বোঝা সহজ। কোনও মান ফিরে আসবে কি না সে বিষয়ে কোনও বিকল্প নেই এবং তদ্ব্যতীত, আপনি যদি ভুল কাজটি করেন তবে কোনও বাগ প্রবর্তন করার দরকার নেই।
যদিও আমি তাদের নির্ভরতা হিসাবে ইনজেকশনের কথা বলছি তখনও আমি তাদের "পরিষেবা" হিসাবে উল্লেখ করি as
পরিষেবা / কারখানার আচরণ অত্যন্ত সাদৃশ্যপূর্ণ এবং কিছু লোক বলবে যে কোনও একটিই ভাল। এটি কিছুটা সত্য, তবে জন পাপের স্টাইল গাইডের পরামর্শ অনুসরণ করা এবং কেবল কারখানায় আটকে থাকা আমার পক্ষে আরও সহজ মনে হয়েছে * **
একটি অতিরিক্ত স্পষ্টতা হ'ল কারখানাগুলি ফাংশন / আদিম তৈরি করতে পারে, যখন পরিষেবাগুলি পারে না। এপোক্কের উপর ভিত্তি করে এই জেএসফিডেলটি দেখুন : http://jsfiddle.net/skeller88/PxdSP/1351/ ।
কারখানাটি একটি ফাংশন ফিরিয়ে দেয় যা আহবান করা যেতে পারে:
myApp.factory('helloWorldFromFactory', function() {
return function() {
return "Hello, World!";
};
});
কারখানাটি কোনও পদ্ধতিতে অনুরোধ করা যায় এমন একটি উপাদান দিয়েও ফিরে আসতে পারে:
myApp.factory('helloWorldFromFactory', function() {
return {
sayHello: function() {
return "Hello, World!";
}
};
});
পরিষেবাটি অনুরোধ করা যেতে পারে এমন একটি পদ্ধতি সহ কোনও অবজেক্টকে ফেরত দেয়:
myApp.service('helloWorldFromService', function() {
this.sayHello = function() {
return "Hello, World!";
};
});
আরও তথ্যের জন্য, আমি পার্থক্য নিয়ে লিখেছি একটি পোস্ট দেখুন: http://www.shanemkeller.com/tldr-services-vs-factories-in-angular/
ইতিমধ্যে ভাল উত্তর আছে, কিন্তু আমি কেবল এই একটি ভাগ করতে চান।
প্রথমত: সরবরাহকারী একটি তৈরির উপায় / রেসিপিservice
(সিঙ্গলটন অবজেক্ট) যা ধরুন $ ইনজেক্টর দ্বারা ইনজেকশন দেওয়া হয় (অ্যাঙ্গুলাএস কীভাবে আইওসি প্যাটার্ন সম্পর্কে যায়)।
এবং মান, কারখানা, পরিষেবা এবং ধ্রুবক (4 টি উপায়) - সরবরাহকারী উপায় / রিসিপির উপরে সিনট্যাকটিক চিনি ।
নেই Service vs Factory
অংশ আবৃত করা হয়েছে:
https://www.youtube.com/watch?v=BLzNCkPn3ao
পরিষেবা সম্পর্কে সব হয় new
শব্দ আসলে যা আমরা জানি 4 জিনিস আছে:
prototype
বস্তুর সাথে লিঙ্ক করেcontext
থেকেthis
this
এবং ফ্যাক্টরি সমস্ত ফ্যাক্টরি প্যাটার্ন সম্পর্কে - এতে এমন ফাংশন রয়েছে যা সেবার মতো অবজেক্টগুলিকে ফিরিয়ে দেয়।
এবং এই সহজ / সংক্ষিপ্ত ভিডিও: সরবরাহকারীকেও কভার করে : https://www.youtube.com/watch?v=HvTZbQ_hUZY (সেখানে আপনি দেখতে পারেন তারা কীভাবে কারখানায় সরবরাহকারী হয়)
সরবরাহকারীর রেসিপিটি অ্যাপটি সম্পূর্ণরূপে শুরু / আরম্ভ করার আগে অ্যাপ্লিকেশন কনফিগারেশনে ব্যবহৃত হয়।
এই সমস্ত পোস্ট পড়ার পরে এটি আমার জন্য আরও বিভ্রান্তি তৈরি করেছে .. তবে এখনও সমস্ত মূল্যবান তথ্য .. অবশেষে আমি নীচের সারণীটি পেয়েছি যা সাধারণ তুলনার সাথে তথ্য দেবে
এবং শিক্ষানবিশদের জন্য বুঝতে: - এটি ব্যবহারের ক্ষেত্রে সঠিক হতে পারে না তবে উচ্চ স্তরে এই তিনটির ক্ষেত্রে ইউজকেস রয়েছে।
angular.module('myApp').config(function($testProvider){
$testProvider.someFunction();
})
মৌলিক পরিস্থিতিতে কারখানা ও পরিষেবা একই আচরণ করে।
এখানে কিছু ব্রয়লারপ্ল্যাট কোড যা আমি AngularjS এ অবজেক্ট ফ্যাক্টরির জন্য একটি কোড-টেমপ্লেট হিসাবে নিয়ে এসেছি। উদাহরণস্বরূপ আমি একটি গাড়ি / কারখানা ব্যবহার করেছি। নিয়ামকটিতে সাধারণ প্রয়োগের কোড তৈরি করে।
<script>
angular.module('app', [])
.factory('CarFactory', function() {
/**
* BroilerPlate Object Instance Factory Definition / Example
*/
this.Car = function() {
// initialize instance properties
angular.extend(this, {
color : null,
numberOfDoors : null,
hasFancyRadio : null,
hasLeatherSeats : null
});
// generic setter (with optional default value)
this.set = function(key, value, defaultValue, allowUndefined) {
// by default,
if (typeof allowUndefined === 'undefined') {
// we don't allow setter to accept "undefined" as a value
allowUndefined = false;
}
// if we do not allow undefined values, and..
if (!allowUndefined) {
// if an undefined value was passed in
if (value === undefined) {
// and a default value was specified
if (defaultValue !== undefined) {
// use the specified default value
value = defaultValue;
} else {
// otherwise use the class.prototype.defaults value
value = this.defaults[key];
} // end if/else
} // end if
} // end if
// update
this[key] = value;
// return reference to this object (fluent)
return this;
}; // end this.set()
}; // end this.Car class definition
// instance properties default values
this.Car.prototype.defaults = {
color: 'yellow',
numberOfDoors: 2,
hasLeatherSeats: null,
hasFancyRadio: false
};
// instance factory method / constructor
this.Car.prototype.instance = function(params) {
return new
this.constructor()
.set('color', params.color)
.set('numberOfDoors', params.numberOfDoors)
.set('hasFancyRadio', params.hasFancyRadio)
.set('hasLeatherSeats', params.hasLeatherSeats)
;
};
return new this.Car();
}) // end Factory Definition
.controller('testCtrl', function($scope, CarFactory) {
window.testCtrl = $scope;
// first car, is red, uses class default for:
// numberOfDoors, and hasLeatherSeats
$scope.car1 = CarFactory
.instance({
color: 'red'
})
;
// second car, is blue, has 3 doors,
// uses class default for hasLeatherSeats
$scope.car2 = CarFactory
.instance({
color: 'blue',
numberOfDoors: 3
})
;
// third car, has 4 doors, uses class default for
// color and hasLeatherSeats
$scope.car3 = CarFactory
.instance({
numberOfDoors: 4
})
;
// sets an undefined variable for 'hasFancyRadio',
// explicitly defines "true" as default when value is undefined
$scope.hasFancyRadio = undefined;
$scope.car3.set('hasFancyRadio', $scope.hasFancyRadio, true);
// fourth car, purple, 4 doors,
// uses class default for hasLeatherSeats
$scope.car4 = CarFactory
.instance({
color: 'purple',
numberOfDoors: 4
});
// and then explicitly sets hasLeatherSeats to undefined
$scope.hasLeatherSeats = undefined;
$scope.car4.set('hasLeatherSeats', $scope.hasLeatherSeats, undefined, true);
// in console, type window.testCtrl to see the resulting objects
});
</script>
এখানে একটি সহজ উদাহরণ। আমি কয়েকটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করছি যা "পজিশন" অবজেক্টটি অক্ষাংশ এবং দ্রাঘিমাংশ প্রকাশ করে, তবে বিভিন্ন বস্তুর বৈশিষ্ট্যের মাধ্যমে প্রত্যাশা করে। আমি বিক্রেতা কোডটি হ্যাক করতে চাইনি, তাই আমি যে "পজিশন" অবজেক্টগুলি কাছাকাছি যাচ্ছিলাম তা সামঞ্জস্য করেছি।
angular.module('app')
.factory('PositionFactory', function() {
/**
* BroilerPlate Object Instance Factory Definition / Example
*/
this.Position = function() {
// initialize instance properties
// (multiple properties to satisfy multiple external interface contracts)
angular.extend(this, {
lat : null,
lon : null,
latitude : null,
longitude : null,
coords: {
latitude: null,
longitude: null
}
});
this.setLatitude = function(latitude) {
this.latitude = latitude;
this.lat = latitude;
this.coords.latitude = latitude;
return this;
};
this.setLongitude = function(longitude) {
this.longitude = longitude;
this.lon = longitude;
this.coords.longitude = longitude;
return this;
};
}; // end class definition
// instance factory method / constructor
this.Position.prototype.instance = function(params) {
return new
this.constructor()
.setLatitude(params.latitude)
.setLongitude(params.longitude)
;
};
return new this.Position();
}) // end Factory Definition
.controller('testCtrl', function($scope, PositionFactory) {
$scope.position1 = PositionFactory.instance({latitude: 39, longitude: 42.3123});
$scope.position2 = PositionFactory.instance({latitude: 39, longitude: 42.3333});
}) // end controller
;
রেফারেন্স হিসাবে এই পৃষ্ঠাটি এবং ডকুমেন্টেশন ব্যবহার করে (যা দেখেছি গতবারের চেয়ে অনেক উন্নতি হয়েছে বলে মনে হচ্ছে), আমি নীচের আসল (-শ) ওয়ার্ল্ড ডেমোকে একসাথে রেখেছি যা 5 টি স্বাদ সরবরাহকারীর 4 ব্যবহার করে; মান, ধ্রুবক, কারখানা এবং পূর্ণ বিকাশ সরবরাহকারী।
এইচটিএমএল:
<div ng-controller="mainCtrl as main">
<h1>{{main.title}}*</h1>
<h2>{{main.strapline}}</h2>
<p>Earn {{main.earn}} per click</p>
<p>You've earned {{main.earned}} by clicking!</p>
<button ng-click="main.handleClick()">Click me to earn</button>
<small>* Not actual money</small>
</div>
অ্যাপ্লিকেশন
var app = angular.module('angularProviders', []);
// A CONSTANT is not going to change
app.constant('range', 100);
// A VALUE could change, but probably / typically doesn't
app.value('title', 'Earn money by clicking');
app.value('strapline', 'Adventures in ng Providers');
// A simple FACTORY allows us to compute a value @ runtime.
// Furthermore, it can have other dependencies injected into it such
// as our range constant.
app.factory('random', function randomFactory(range) {
// Get a random number within the range defined in our CONSTANT
return Math.random() * range;
});
// A PROVIDER, must return a custom type which implements the functionality
// provided by our service (see what I did there?).
// Here we define the constructor for the custom type the PROVIDER below will
// instantiate and return.
var Money = function(locale) {
// Depending on locale string set during config phase, we'll
// use different symbols and positioning for any values we
// need to display as currency
this.settings = {
uk: {
front: true,
currency: '£',
thousand: ',',
decimal: '.'
},
eu: {
front: false,
currency: '€',
thousand: '.',
decimal: ','
}
};
this.locale = locale;
};
// Return a monetary value with currency symbol and placement, and decimal
// and thousand delimiters according to the locale set in the config phase.
Money.prototype.convertValue = function(value) {
var settings = this.settings[this.locale],
decimalIndex, converted;
converted = this.addThousandSeparator(value.toFixed(2), settings.thousand);
decimalIndex = converted.length - 3;
converted = converted.substr(0, decimalIndex) +
settings.decimal +
converted.substr(decimalIndex + 1);
converted = settings.front ?
settings.currency + converted :
converted + settings.currency;
return converted;
};
// Add supplied thousand separator to supplied value
Money.prototype.addThousandSeparator = function(value, symbol) {
return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, symbol);
};
// PROVIDER is the core recipe type - VALUE, CONSTANT, SERVICE & FACTORY
// are all effectively syntactic sugar built on top of the PROVIDER construct
// One of the advantages of the PROVIDER is that we can configure it before the
// application starts (see config below).
app.provider('money', function MoneyProvider() {
var locale;
// Function called by the config to set up the provider
this.setLocale = function(value) {
locale = value;
};
// All providers need to implement a $get method which returns
// an instance of the custom class which constitutes the service
this.$get = function moneyFactory() {
return new Money(locale);
};
});
// We can configure a PROVIDER on application initialisation.
app.config(['moneyProvider', function(moneyProvider) {
moneyProvider.setLocale('uk');
//moneyProvider.setLocale('eu');
}]);
// The ubiquitous controller
app.controller('mainCtrl', function($scope, title, strapline, random, money) {
// Plain old VALUE(s)
this.title = title;
this.strapline = strapline;
this.count = 0;
// Compute values using our money provider
this.earn = money.convertValue(random); // random is computed @ runtime
this.earned = money.convertValue(0);
this.handleClick = function() {
this.count ++;
this.earned = money.convertValue(random * this.count);
};
});
ওয়ার্কিং ডেমো ।
এই উত্তরটি বিষয় / প্রশ্নের ঠিকানা দেয়
অথবা
মূলত যা হয় তা হ'ল
যখন আপনি একটি করতে factory()
এটা সেট করে আপনি function
প্রদানকারীর দ্বিতীয় যুক্তি প্রদান করা $get
এবং এটি (আগমন provider(name, {$get:factoryFn })
), সব হল আপনি provider
কিন্তু কোন সম্পত্তি / পদ্ধতি ছাড়া অন্য$get
যে provider
(মানে আপনি এই কনফিগার করা যাবে না)
কারখানার উত্স কোড
function factory(name, factoryFn, enforce) {
return provider(name, {
$get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
});
};
যখন একটি উপার্জন service()
এটি আপনি একটি সঙ্গে একটি (কারখানা) সরবরাহ আসতে function
যে উদ্বুদ্ধ constructor
এবং এটি আয় (কন্সট্রাকটর আপনি আপনার সেবা প্রদান করা দৃষ্টান্ত আগমন)
উত্স পরিষেবার কোড
function service(name, constructor) {
return factory(name, ['$injector', function($injector) {
return $injector.instantiate(constructor);
}]);
};
সুতরাং মূলত উভয় ক্ষেত্রেই আপনি একটি সরবরাহকারী পাবেন - আপনার প্রদত্ত ফাংশনটি সেট করুন, তবে আপনি কনফিগারেশন ব্লকের জন্য মূলত সরবরাহকারী () সরবরাহ করতে পারবেন তার চেয়ে বেশি কিছু দিতে পারেন $
আমি চমৎকার উত্তর অনেকটা জানি কিন্তু আমি ব্যবহার আমার অভিজ্ঞতা শেয়ার করতে আছে
1. service
ডিফল্ট বেশিরভাগ ক্ষেত্রেই জন্য
2. factory
সেবা নির্দিষ্ট উদাহরণস্বরূপ যে তৈরি করতে ব্যবহার করা
// factory.js ////////////////////////////
(function() {
'use strict';
angular
.module('myApp.services')
.factory('xFactory', xFactoryImp);
xFactoryImp.$inject = ['$http'];
function xFactoryImp($http) {
var fac = function (params) {
this._params = params; // used for query params
};
fac.prototype.nextPage = function () {
var url = "/_prc";
$http.get(url, {params: this._params}).success(function(data){ ...
}
return fac;
}
})();
// service.js //////////////////////////
(function() {
'use strict';
angular
.module('myApp.services')
.service('xService', xServiceImp);
xServiceImp.$inject = ['$http'];
function xServiceImp($http) {
this._params = {'model': 'account','mode': 'list'};
this.nextPage = function () {
var url = "/_prc";
$http.get(url, {params: this._params}).success(function(data){ ...
}
}
})();
এবং ব্যবহার:
controller: ['xFactory', 'xService', function(xFactory, xService){
// books = new instance of xFactory for query 'book' model
var books = new xFactory({'model': 'book', 'mode': 'list'});
// accounts = new instance of xFactory for query 'accounts' model
var accounts = new xFactory({'model': 'account', 'mode': 'list'});
// accounts2 = accounts variable
var accounts2 = xService;
...
পার্টিতে একটু দেরি। তবে আমি ভেবেছিলাম কারখানা, পরিষেবা এবং সরবরাহকারীর পদ্ধতি ব্যবহার করে কৌণিক জেএস কাস্টম পরিষেবাদি বিকাশের বিষয়ে কারা জানতে (বা স্পষ্টতা থাকতে হবে) এর জন্য এটি আরও সহায়ক।
আমি এই ভিডিওটি জুড়ে এসেছি যা AngularJS কাস্টম পরিষেবাদি বিকাশের জন্য কারখানা, পরিষেবা এবং সরবরাহকারীর পদ্ধতি সম্পর্কে স্পষ্টভাবে ব্যাখ্যা করে:
https://www.youtube.com/watch?v=oUXku28ex-M
উত্স কোড: http://www.techcbt.com/ পোস্ট / 353 / Angular- JS-basics/ how-to-develop-angularjs-custom-service
পাঠকদের উপকারের জন্য এখানে পোস্ট করা কোডটি উপরের উত্স থেকে সরাসরি অনুলিপি করা হয়।
"ফ্যাক্টরি" ভিত্তিক কাস্টম পরিষেবাদির কোডটি নীচে রয়েছে (যা HTTP পরিষেবা কল করার পাশাপাশি উভয় সিঙ্ক এবং অ্যাসিঙ্ক সংস্করণে যায়):
var app = angular.module("app", []);
app.controller('emp', ['$scope', 'calcFactory',
function($scope, calcFactory) {
$scope.a = 10;
$scope.b = 20;
$scope.doSum = function() {
//$scope.sum = calcFactory.getSum($scope.a, $scope.b); //synchronous
calcFactory.getSum($scope.a, $scope.b, function(r) { //aynchronous
$scope.sum = r;
});
};
}
]);
app.factory('calcFactory', ['$http', '$log',
function($http, $log) {
$log.log("instantiating calcFactory..");
var oCalcService = {};
//oCalcService.getSum = function(a,b){
// return parseInt(a) + parseInt(b);
//};
//oCalcService.getSum = function(a, b, cb){
// var s = parseInt(a) + parseInt(b);
// cb(s);
//};
oCalcService.getSum = function(a, b, cb) { //using http service
$http({
url: 'http://localhost:4467/Sum?a=' + a + '&b=' + b,
method: 'GET'
}).then(function(resp) {
$log.log(resp.data);
cb(resp.data);
}, function(resp) {
$log.error("ERROR occurred");
});
};
return oCalcService;
}
]);
কাস্টম পরিষেবাদির জন্য "পরিষেবা" পদ্ধতির কোড (এটি 'ফ্যাক্টরি'র সাথে বেশ মিল, তবে সিনট্যাক্সের দৃষ্টিকোণ থেকে পৃথক):
var app = angular.module("app", []);
app.controller('emp', ['$scope', 'calcService', function($scope, calcService){
$scope.a = 10;
$scope.b = 20;
$scope.doSum = function(){
//$scope.sum = calcService.getSum($scope.a, $scope.b);
calcService.getSum($scope.a, $scope.b, function(r){
$scope.sum = r;
});
};
}]);
app.service('calcService', ['$http', '$log', function($http, $log){
$log.log("instantiating calcService..");
//this.getSum = function(a,b){
// return parseInt(a) + parseInt(b);
//};
//this.getSum = function(a, b, cb){
// var s = parseInt(a) + parseInt(b);
// cb(s);
//};
this.getSum = function(a, b, cb){
$http({
url: 'http://localhost:4467/Sum?a=' + a + '&b=' + b,
method: 'GET'
}).then(function(resp){
$log.log(resp.data);
cb(resp.data);
},function(resp){
$log.error("ERROR occurred");
});
};
}]);
কাস্টম পরিষেবাদির জন্য "সরবরাহকারী" পদ্ধতিটির কোড (এটি প্রয়োজনীয়, যদি আপনি এমন পরিষেবা বিকাশ করতে চান যা কনফিগার করা যেতে পারে):
var app = angular.module("app", []);
app.controller('emp', ['$scope', 'calcService', function($scope, calcService){
$scope.a = 10;
$scope.b = 20;
$scope.doSum = function(){
//$scope.sum = calcService.getSum($scope.a, $scope.b);
calcService.getSum($scope.a, $scope.b, function(r){
$scope.sum = r;
});
};
}]);
app.provider('calcService', function(){
var baseUrl = '';
this.config = function(url){
baseUrl = url;
};
this.$get = ['$log', '$http', function($log, $http){
$log.log("instantiating calcService...")
var oCalcService = {};
//oCalcService.getSum = function(a,b){
// return parseInt(a) + parseInt(b);
//};
//oCalcService.getSum = function(a, b, cb){
// var s = parseInt(a) + parseInt(b);
// cb(s);
//};
oCalcService.getSum = function(a, b, cb){
$http({
url: baseUrl + '/Sum?a=' + a + '&b=' + b,
method: 'GET'
}).then(function(resp){
$log.log(resp.data);
cb(resp.data);
},function(resp){
$log.error("ERROR occurred");
});
};
return oCalcService;
}];
});
app.config(['calcServiceProvider', function(calcServiceProvider){
calcServiceProvider.config("http://localhost:4467");
}]);
অবশেষে ইউআই যা উপরের যে কোনও পরিষেবার সাথে কাজ করে:
<html>
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js" ></script>
<script type="text/javascript" src="t03.js"></script>
</head>
<body ng-app="app">
<div ng-controller="emp">
<div>
Value of a is {{a}},
but you can change
<input type=text ng-model="a" /> <br>
Value of b is {{b}},
but you can change
<input type=text ng-model="b" /> <br>
</div>
Sum = {{sum}}<br>
<button ng-click="doSum()">Calculate</button>
</div>
</body>
</html>
অ্যাংুলারজেএস উত্স থেকে কেবল জিনিসগুলি স্পষ্ট করার জন্য, আপনি একটি পরিষেবা দেখতে পাচ্ছেন কেবলমাত্র ফ্যাক্টরি ফাংশনটিকে কল করে যা পরিদর্শনকারীকে ফাংশন বলে:
function factory(name, factoryFn) {
return provider(name, { $get: factoryFn });
}
function service(name, constructor) {
return factory(name, ['$injector', function($injector) {
return $injector.instantiate(constructor);
}]);
}
আসুন অ্যাঙ্গুলারজেএস-এ ব্যবসায়িক যুক্তি পরিচালনার তিনটি উপায়কে সহজ উপায়ে আলোচনা করা যাক: ( ইয়াকভের কোর্সেরা অ্যাঙ্গুলারজেএস কোর্স দ্বারা অনুপ্রাণিত )
সেবা :
বাক্য গঠন:
app.js
var app = angular.module('ServiceExample',[]);
var serviceExampleController =
app.controller('ServiceExampleController', ServiceExampleController);
var serviceExample = app.service('NameOfTheService', NameOfTheService);
ServiceExampleController.$inject = ['NameOfTheService'] //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>
পরিষেবার বৈশিষ্ট্য:
কারখানা
প্রথমে সিনট্যাক্সটি একবার দেখে নেওয়া যাক:
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();
কারখানার বৈশিষ্ট্য:
.service()
পদ্ধতি হল কারখানা যে সবসময় সেবার একই ধরনের, যা একটি Singleton হয় উৎপন্ন, এবং এটি আচরণ কনফিগার করার কোনো সহজ উপায় ছাড়া। এই .service()
পদ্ধতিটি সাধারণত এমন কোনও কিছুর জন্য শর্টকাট হিসাবে ব্যবহৃত হয় যা কোনও কনফিগারেশনের প্রয়োজন হয় না।প্রদানকারী
প্রথমে সিনট্যাক্সটি আবার দেখুন:
angular.module('ProviderModule', [])
.controller('ProviderModuleController', ProviderModuleController)
.provider('ServiceProvider', ServiceProvider)
.config(Config); //optional
Config.$inject = ['ServiceProvider'];
function Config(ServiceProvider) {
ServiceProvider.defaults.maxItems = 10; //some default value
}
ProviderModuleController.$inject = ['ServiceProvider'];
function ProviderModuleController(ServiceProvider) {
//some methods
}
function ServiceProvider() {
var provider = this;
provider.defaults = {
maxItems: 10
};
provider.$get = function () {
var someList = new someListService(provider.defaults.maxItems);
return someList;
};
}
}
সরবরাহকারীর বৈশিষ্ট্য:
.service
বা .factory
পদ্ধতিতে আমাদের পরিষেবাগুলি কনফিগার করি ।$get
এমন একটি ফাংশন যা সরবরাহকারীর উদাহরণের সাথে সরাসরি সংযুক্ত থাকে। এই ফাংশনটি একটি ফ্যাক্টরি ফাংশন। অন্য কথায়, এটি কেবল সেই পদ্ধতিটির মতো যা আমরা পদ্ধতিতে সরবরাহ করতে ব্যবহার করি .factory
। এই ফাংশনে, আমরা আমাদের নিজস্ব পরিষেবা তৈরি করি। এই $get
সম্পত্তি, এটি একটি ফাংশন, যা সরবরাহকারীকে সরবরাহকারী করে তোলে । অ্যাঙ্গুলারজেএস সরবরাহকারীর কাছ থেকে এমন একটি সম্পত্তি পাওয়ার প্রত্যাশা করে যার মূল্য একটি ফাংশন যা কৌণিকর একটি কারখানার ফাংশন হিসাবে বিবেচনা করবে। তবে এই পুরো সরবরাহকারীটিকে কী সেটাকে খুব বিশেষ করে তুলেছে তা হ'ল এটি হ'ল যে আমরা config
পরিষেবা সরবরাহকারীর অভ্যন্তরে কিছু অবজেক্ট সরবরাহ করতে পারি এবং এটি সাধারণত পূর্বনির্ধারিত আসে যা আমরা পরে ধাপে ওভাররাইট করতে পারি, যেখানে আমরা পুরো অ্যাপ্লিকেশনটি কনফিগার করতে পারি।কারখানা: কারখানাটি আপনি আসলে কারখানার অভ্যন্তরে কোনও বস্তু তৈরি করেন এবং এটি ফিরিয়ে দেন।
পরিষেবা: আপনার সবেমাত্র পরিষেবাটির একটি স্ট্যান্ডার্ড ফাংশন রয়েছে যা ফাংশন সংজ্ঞায়িত করতে এই কীওয়ার্ডটি ব্যবহার করে।
সরবরাহকারী: সরবরাহকারীর মধ্যে একটি রয়েছে you আপনাকে সংজ্ঞায়িত করুন এবং এটি ডেটা ফেরত দেয় এমন অবজেক্টটি পেতে ব্যবহার করা যেতে পারে।
মূলত, সরবরাহকারী, কারখানা এবং পরিষেবা সমস্ত পরিষেবা। কারখানা কোনও পরিষেবার একটি বিশেষ ক্ষেত্রে যখন আপনার প্রয়োজন সমস্ত একটি a get () ফাংশন হয়, আপনাকে কম কোড দিয়ে এটি লেখার অনুমতি দেয়।
পরিষেবাদি, কারখানা এবং সরবরাহকারীদের মধ্যে প্রধান পার্থক্য হ'ল তাদের জটিলতা। পরিষেবাদিগুলি সহজতম ফর্ম, কারখানাগুলি আরও কিছুটা শক্তিশালী এবং সরবরাহকারীর রানটাইমটিতে কনফিগার করা যায়।
এখানে প্রতিটি ব্যবহার করার একটি সংক্ষিপ্তসার এখানে দেওয়া হয়েছে:
কারখানা : আপনি যে মান সরবরাহ করছেন তা অন্য ডেটার ভিত্তিতে গণনা করা দরকার।
পরিষেবা : আপনি পদ্ধতি সহ কোনও বস্তু ফিরিয়ে দিচ্ছেন।
সরবরাহকারী : আপনি কনফিগার করতে সক্ষম হতে চান, কনফিগার পর্বের সময়, অবজেক্টটি তৈরি হওয়ার আগে তৈরি হতে চলেছে। অ্যাপ্লিকেশন সম্পূর্ণরূপে শুরু হওয়ার আগে বেশিরভাগ অ্যাপ্লিকেশন কনফিগারেশনে সরবরাহকারীটি ব্যবহার করুন।
১. সার্ভিসগুলি সিঙ্গেলটন অবজেক্টস যা প্রয়োজনীয় অবস্থায় তৈরি হয় এবং অ্যাপ্লিকেশন লাইফ-চক্র (ব্রাউজারটি বন্ধ থাকলে) অবধি শেষ হয় না। কন্ট্রোলাররা যখন আর প্রয়োজন হয় না তখন তারা ধ্বংস হয়ে যায় এবং পরিষ্কার হয়।
2. কোনও পরিষেবা তৈরির সহজতম উপায় হ'ল কারখানা () পদ্ধতিটি ব্যবহার করে। ফ্যাক্টরি () পদ্ধতিটি পরিষেবার ফাংশন এবং পরিষেবাদি ডেটা সম্বলিত কোনও বস্তুকে ফেরত দিয়ে একটি পরিষেবা সংজ্ঞা দিতে দেয় allows পরিষেবা সংজ্ঞা ফাংশনটি যেখানে আমরা আমাদের ইনজেকশনযোগ্য পরিষেবাদি যেমন $ HTTP এবং $ q রাখি। উদা:
angular.module('myApp.services')
.factory('User', function($http) { // injectables go here
var backendUrl = "http://localhost:3000"; var service = {
// our factory definition
user: {},
setName: function(newName) {
service.user['name'] = newName;
},
setEmail: function(newEmail) { service.user['email'] = newEmail;
},
save: function() {
return $http.post(backendUrl + '/users', { user: service.user
}); }
};
return service; });
আমাদের অ্যাপ্লিকেশনটিতে কারখানা () ব্যবহার করা
আমাদের অ্যাপ্লিকেশনটিতে কারখানাটি ব্যবহার করা সহজ কারণ আমরা রান-টাইমে যেখানে এটি প্রয়োজন সেখানে কেবল ইনজেক্ট করতে পারি।
angular.module('myApp')
.controller('MainController', function($scope, User) {
$scope.saveUser = User.save;
});
সিনট্যাকটিক চিনির পার্থক্য । কেবল সরবরাহকারীর প্রয়োজন। বা অন্য কথায় কেবল সরবরাহকারীই আসল কৌণিক, অন্য সমস্তগুলি প্রাপ্ত হয় (কোড হ্রাস করতে)। মান () নামে একটি সাধারণ সংস্করণও রয়েছে যা কেবলমাত্র মান দেয়, কোনও গণনা বা ফাংশন হয় না। এমনকি মান প্রদানকারী থেকে প্রাপ্ত!
তাহলে কেন এই ধরনের জটিলতা, আমরা কেন কেবল সরবরাহকারী ব্যবহার করতে পারি না এবং সমস্ত কিছু ভুলে যেতে পারি না? আমাদের সহজে কোড লিখতে এবং আরও ভাল যোগাযোগ করতে সহায়তা করার কথা রয়েছে। এবং সংলগ্ন ইন গাল জবাব হবে, এটি আরও জটিলতর কাঠামোগত বিক্রয় আরও ভাল হয়।
কৌণিক ইনজেকশন আমাদের এই সিদ্ধান্তে পৌঁছানোর প্রথম ইঙ্গিত দেয়।
" not ইনজেক্টর সরবরাহকারীর দ্বারা নির্ধারিত হিসাবে অবজেক্টের দৃষ্টান্তগুলি পুনরুদ্ধার করতে ব্যবহৃত হয় " পরিষেবা নয়, কারখানা নয় তবে সরবরাহকারী।
এবং আরও ভাল উত্তরটি হ'ল: "একটি কৌণিক পরিষেবা একটি পরিষেবা কারখানার দ্বারা তৈরি করা হয় These $ get, যা পরিষেবা কারখানার কার্যকারিতা ধারণ করে called
সুতরাং মাস্টার প্রদানকারী এবং ইনজেক্টর এবং সমস্ত স্থানে পড়ে যাবে :)। এবং এটি টাইপসক্রিপ্টে আকর্ষণীয় হয়ে ওঠে যখন IS গেটটি আইভ্যাসিওয়ারপ্রায়াইডারের কাছ থেকে উত্তরাধিকার সূত্রে কোনও সরবরাহকারীর মধ্যে প্রয়োগ করা যেতে পারে।