An féidir le duine do thosaitheoirí an difríocht idir seirbhís, monarcha agus soláthraí in AngularJS a mhíniú go soiléir?


freagra 1:

AngularJS: difríocht idir an tseirbhís agus an soláthraí agus an mhonarcha

Má tá tú á lorg, is dócha go dteastaíonn uait a fháil amach cé acu ceann atá ceart duitse. Nó toisc gur tháinig tú trasna ar an triúr agus go bhfuil tú ag iarraidh an difríocht a insint toisc go bhfuil an chuma chéanna orthu.

Má cheapann tú go bhfuil siad cosúil lena chéile, tá an ceart agat. Tá siad an-chosúil. Go deimhin, tá siad uile mar an gcéanna.

Is soláthraithe iad uile. Níl sa mhonarcha agus sa tseirbhís ach cásanna speisialta de chuid an tsoláthraí, ach is féidir leat aon rud a theastaíonn uait a bhaint amach ach an soláthraí amháin a úsáid. Taispeánfaidh mé duit.

An soláthraí

Cruthóimid soláthraí a thabharfaidh luach ar ais agus a thaispeánfaidh an luach sin go simplí. Dhéanfá é seo:

var mod = Angle.module ("MyModule", []); mod.provider ("myProvider", feidhm () {seo. $ faigh = feidhm () {faigh ar ais "Mo Luach";};}); mod.controller ("MyController", feidhm (myProvider) {console.log ("MyController - myProvider:" + myProvider);}); Saincheist CONSOLE MyController - myProvider: Mo luach

Is féidir sampla idirghníomhach oibre a fháil ag: JS Fiddle.

Is féidir leat luach a “sholáthar” le “soláthraí” ag a chroílár. D’fhéadfadh an luach seo a bheith ar rud ar bith. Sa chás seo, is sreang é leis an luach "Mo luach", ach is féidir gur feidhm nó réad é go héasca.

I samplaí cód eile, tabhair faoi deara go mbainfidh mé amach tag agus sainmhíniú an mod chun na snippets cód a fháil gearr agus go pointe.

Ní bhfaigheann uilleach an luach ach uair amháin

Tabhair faoi deara nach bhfaigheann uilleach an luach ach uair amháin, is cuma cé chomh minic a instealltar an soláthraí. Is é sin, iarrann sé $ fháil () ach uair amháin, stórálann sé an luach a sholáthraíonn $ faigh (), agus tugann sé an luach stóráilte céanna duit gach uair.

Chun a bhfuil i gceist agam a thaispeáint duit, cruthóidh mé rialtóir eile agus cuirfidh mé treoir consól eile leis an soláthraí ionas go bhfeicfidh tú cad a tharlóidh.

mod.provider ("myProvider", feidhm () {seo. $ faigh = feidhm () {console.log ("MyProviderFunction. $ faigh () ar a dtugtar."); // BHÍONN an tuairisceán líne seo "Mo Luach";}; }); mod.controller ("MyController", feidhm (myProvider) {console.log ("MyController - myProvider:" + myProvider);}); mod.controller ("MyController2", feidhm (myProvider) {// ADDED an rialtóir console.log ("MyController2 - myProvider:" + myProvider);}); CONSOLE OUTPUT MyProviderFunction. Tugtar $ Faigh (). MyController - myProvider: mo luach MyController2 - myProvider: mo luach

Oscailte i JS Fiddle

Mar a fheiceann tú, níor glaodh ar an bhfeidhm $ get () ach uair amháin.

Tabhair faoi deara gur scríobh muid dornán cód don soláthraí chun modh ar a dtugtar $ get () a chruthú. Cén fáth nach ndéanfá, in ionad feidhm uilleach a thabhairt a shainíonn feidhm eile, cén fáth nach dtugann tú ach an fheidhm a theastaíonn uainn a chur i gcrích go díreach ina ionad? Bhuel, is féidir le Angular monarcha a ghlaoch air sin.

Monarcha

I monarcha, ní sholáthraíonn tú ach an corp don mhodh $ faigh agus déanann Angular an chuid eile. Seo an chuma atá ar an gcód nua, mar feicfidh tú go ndéanann sé an rud céanna.

mod.factory ("myProvider", feidhm () {// "soláthróir" athraithe go console.log "monarchan" ("Feidhm monarchan ar a dtugtar."); faigh ar ais "Mo Luach";}); mod.controller ("MyController", feidhm (myProvider) {console.log ("MyController - myProvider:" + myProvider);}); mod.controller ("MyController2", feidhm (myProvider) {console.log ("MyController2 - myProvider:" + myProvider);}); CONSOLE EXIT Feidhm monarchan ar a dtugtar. MyController - myProvider: mo luach MyController2 - myProvider: mo luach

Oscailte i JS Fiddle

Anois b’fhéidir go bhfuil tú ag fiafraí cén fáth ar cheart duit soláthróir a úsáid riamh más féidir leat an rud céanna a dhéanamh le monarcha le níos lú cód. Tá cúpla cúis ann a chlúdóidh mé níos déanaí. I láthair na huaire ba mhaith liom fanacht dílis do theideal an phoist seo agus aghaidh a thabhairt ar an difríocht idir an dá cheann seo (díoltóir agus monarcha) agus seirbhís.

Go dtí seo tá luach sreinge simplí curtha ar ais againn, ach go praiticiúil is dócha go dteastaíonn uainn réad a thabhairt ar ais an chuid is mó den am. Bhuel, ní athródh sé sin ár sampla go mór. Is féidir linn an sreang a fhillimid ar réad a mhalartú go héasca.

Mar shampla, déanaimis é seo trí réad a chur ar ais ina bhfuil feidhm ar a dtugtar getValue (). Anois tá bealaí éagsúla ann chun réad a chruthú i JavaScript. Úsáidimid an cur chuige tógálaí réad, áit a chruthaímid feidhm a bhfuil airíonna agus feidhmeanna ag réad agus a úsáideann an eochairfhocal nua chun é a chur ar an toirt.

Feidhm MyObject () {// ADDED our object constructor this.getValue = feidhm () {faigh ar ais "Mo Luach"; }; } mod.factory ("myProvider", feidhm () {console.log ("Feidhm monarchan ar a dtugtar."); seol MyObject () nua; // CREATE shampla ár réad}); mod.controller ("MyController", feidhm (myProvider) {console.log ("MyController - myProvider:" + myProvider.getValue ()); // ATHRÚ glaoch ar getValue ()}); mod.controller ("MyController2", feidhm (myProvider) {console.log ("MyController2 - myProvider:" + myProvider.getValue ()); // ATHRÚ glaoch ar getValue ()}); CONSOLE EXIT Feidhm monarchan ar a dtugtar. MyController - myProvider: mo luach MyController2 - myProvider: mo luach

Oscailte i JS Fiddle

Anois ba mhaith liom athrú beag a dhéanamh air mar go dtiocfaidh sé seo go maith don chéad choincheap eile. In ár sampla cruthaímid an fheidhm "Object Constructor" MyObject (). Mar sin féin, ós rud é nach ndéanaimid iad a chur ar an toirt ach in aon áit amháin, is féidir linn feidhm gan ainm a úsáid ina ionad.

Athrú an-bheag é seo. In ionad:

Feidhm MyObject () {this.getValue = feidhm () {faigh ar ais "Mo Luach"; }; } mod.factory ("myProvider", feidhm () {console.log ("Feidhm monarchan ar a dtugtar."); seol MyObject ();} nua;

Déanaimid é:

mod.factory ("myProvider", feidhm () {console.log ("Feidhm monarchan ar a dtugtar."); feidhm nua a thabhairt ar ais () {// INLINED our object constructor this.getValue = function () {return "My Value"; };};});

Breathnaíonn an rud iomlán mar seo anois:

mod.factory ("myProvider", feidhm () {console.log ("Feidhm monarchan ar a dtugtar."); feidhm nua a thabhairt ar ais () {// INLINED our object constructor this.getValue = function () {return "My Value"; };};}); mod.controller ("MyController", feidhm (myProvider) {console.log ("MyController - myProvider:" + myProvider.getValue ());}); mod.controller ("MyController2", feidhm (myProvider) {console.log ("MyController2 - myProvider:" + myProvider.getValue ());});

Oscailte i JS Fiddle

Ós rud é gur aon réad amháin atá inár monarcha iomlán, ní bheadh ​​sé go deas dá bhféadfaimis feidhm an tógálaí réada a thabhairt do Angular seachas an mhonarcha funky seo a scríobh. Tá an t-ádh leat, sin seirbhís.

Ag do sheirbhís

Seo an cód céanna, ach amháin go n-úsáidtear seirbhís in ionad monarchan.

mod.service ("myProvider", feidhm () {// "monarcha" athraithe go "seirbhís" // NÓTA: Is é an t-aon fheidhm a ritheadh ​​an tógálaí réada roimh this.getValue = feidhm () {faigh ar ais "Mo Luach";}; }); mod.controller ("MyController", feidhm (myProvider) {console.log ("MyController - myProvider:" + myProvider.getValue ());}); mod.controller ("MyController2", feidhm (myProvider) {console.log ("MyController2 - myProvider:" + myProvider.getValue ());}); Saincheist CONSOLE MyController - myProvider: My Value MyController2 - myProvider: Mo Luach

Oscailte i JS Fiddle

Soláthraí vs seirbhís monarchan vs

Go hachomair, is soláthraithe uile iad soláthraithe, monarchana agus seirbhísí. Is cás speisialta soláthraí é monarcha mura dteastaíonn uait ach feidhm $ faigh () i do sholáthraí. Is féidir leat é a scríobh le níos lú cód. Is cás speisialta de mhonarcha seirbhís nuair is mian leat sampla de réad nua a thabhairt ar ais agus an buntáiste céanna agat níos lú cód a scríobh.

Cathain ar chóir duit ceann a úsáid i gcoinne an chinn eile?

Is é an freagra ná go bhfuil an leagan is speisialaithe á úsáid agat a bhainfidh do sprioc amach. Cuir i gcás go dtugann tú réad atá ann cheana ar ais atá sainithe in áit eile agus go nglacann sé le hargóintí tógálaí. Ní féidir leat argóintí a chur ar aghaidh chuig an tseirbhís, mar sin is amhlaidh a dhéanfá an glao le monarcha.

mod.factory ("myProvider", feidhm () {console.log ("Feidhm monarchan ar a dtugtar."); seol SomeMessageBoxClass nua ("argóint saincheaptha");});

Ceann de na príomhfhachtóirí a bhaineann le cinneadh a dhéanamh idir díoltóir agus monarcha is ea an dteastaíonn uait an réad ginte a chumrú sula ngintear é. Déanann tú é seo trí ghlaoch ar module.config () agus sampla a sheoladh chuig an soláthraí féin (in ionad an ruda a chuir an soláthraí ar ais). Déanann tú é seo trí “sholáthraí” a chur ag gabháil le deireadh ainm do sholáthraí nuair a instealladh tú é.

Seo sampla den chaoi a ndéanfá é sin:

mod.provider ("myProvider", feidhm () {this.value = "Mo luach"; this.setValue = feidhm (newValue) {this.value = newValue;}; seo. $ faigh = feidhm () {seo ar ais. Luach;};}); mod.controller ("MyController", feidhm (myProvider) {console.log ("MyController - myProvider:" + myProvider);}); mod.config (feidhm (myProviderProvider) {// ADDED config section // Tabhair faoi deara an iarmhír bhreise "Soláthraí" myProviderProvider.setValue ("Luach Nua");});

Áirítear leis seo cathain is féidir na trí sholáthraí a úsáid: soláthraí, monarcha agus seirbhís. Tá soláthraí breise ann nach luaitear anseo, ar cás speisialta eile é, agus is é sin an soláthraí luacha.

Más cuimhin leat nuair a thugamar an soláthraí monarchan thuas isteach den chéad uair, thugamar an sampla simplí de luach sreinge a thabhairt ar ais. Bhí an chuma air mar seo:

mod.factory ("myProvider", feidhm () {faigh ar ais "Mo Luach";});

Bhuel, d’fhéadfaimis é sin a dhéanamh i ndáiríre leis an soláthraí luacha, a bhfuil buntáiste aige féin gur féidir leat é a dhéanamh le níos lú cód. Déanann an cód seo a leanas an rud céanna leis an gcód thuas:

mod.value ("myProvider", "Mo Luach");

Cathain a d’úsáidfeá ceann i gcoinne an chinn eile? Is dócha go mbainfeá úsáid as soláthraí na monarchan más mian leat an luach a ríomh bunaithe ar shonraí eile, e.g. B. Sonraí ó sholáthraí luacha eile nó ó fhoinse sheachtrach. Agus / nó nuair is mian leat an luach a ríomh go díreach nuair a iarrtar é den chéad uair. Seo roinnt samplaí:

// Sampla ina mbraitheann an mhonarcha ar mod.value soláthraí "luach" ("iolrach", 3); mod.factory ("luach", feidhm (iolrach) {tuairisceán 10 * iolrach;}); // sampla nuair a bhíonn an mhonarcha ag brath ar shonraí seachtracha mod.factory ("luach", feidhm (iolrach) {var multip = getDateFromExternalPage (); faigh ar ais 10 * iolrach;});

Ar thug mé le tuiscint gurb é an luach an t-aon soláthróir eile? Bhuel, a ndeor, tá ceann eile ann atá an-chosúil le luach, le dhá dhifríocht bheaga. Tugtar tairiseach ar an soláthraí seo.

Is é an difríocht idir luach agus tairiseach ná go bhfuil luach a shonraítear le tairiseach ar fáil le linn na céime cumraíochta. B’fhéidir gur cuimhin leat ó amanna níos luaithe gur luaigh mé go raibh an soláthraí inrochtana le linn na céime cumraíochta, ach ní raibh Seirbhís agus Monarcha ann.

Bhuel, tá sé mar an gcéanna le luach agus tairiseach. Tá tairiseach ar fáil sa chéim chumraíochta agus níl luach ann. Is í an difríocht eile ná nach féidir luach tairiseach a athrú, mar a thugann an t-ainm le tuiscint. Is é an chéad luach a shannann tú dó an luach a choinníonn sé. Má dhéanann tú iarracht luach difriúil a shannadh dó ina dhiaidh sin, tabharfar neamhaird air.

Seo sampla:

mod.value ("myValue", "An Chéad Sannadh"); mod.value ("myValue", "An Dara Tasc"); mod.constant ("myConstant", "First Assign"); mod.constant ("myConstant", "an dara sannadh"); mod.controller ("MyController", feidhm (myValue, myConstant) {console.log ("myValue:" + myValue); console.log ("myConstant:" + myConstant);}); CONSOLE OUTPUT myValue: an dara sannadh myConstant: an chéad sannadh

Seo achoimre ar cathain ba chóir gach ceann a úsáid:

Is fiú

Sonraíonn tú luach liteartha simplí.

mod.value ("myValue", 10);
    

Tairiseach

Caithfidh tú a bheith in ann an luach seo a rochtain le linn na céime cumraíochta. (le .config ())

mod.constant ("myValue", 10); mod.config (feidhm (myValue) {console.log (myValue);});

Monarcha

Caithfear an luach a shonraigh tú a ríomh ag úsáid sonraí eile.

mod.factory ("myFactory", feidhm () {filleadh 10;});
        

Seirbhís

Tugann tú réad ar ais le modhanna.

mod.service ("myService", feidhm () {var name = "Bob"; this.setName = feidhm (newName) {this.name = newName;}; this.getName = feidhm () {seol seo.name;} });
        

Soláthraí

Sa chéim chumraíochta, ba mhaith leat a bheith in ann an réad atá le cruthú a chruthú sula gcruthófar é.

mod.provider ("greeter", feidhm () {var name; this.setName = feidhm (newName) {name = newName;}; seo. $ faigh = feidhm () {feidhm nua ar ais () {this.sayHi = feidhm () {console.log ("Hi" + ainm;};};};}); mod.config (feidhm (greeterProvider) {greeterProvider.setName ("John");});
        

Chun an pointe a thabhairt abhaile uair dheireanach, seo pictiúr de sholáthraí leis na codanna oibre, luacha agus seirbhíse aibhsithe:


freagra 2:

Go hinmheánach, úsáideann AngularJS Monarcha chun réad seirbhíse agus Soláthraí a chruthú chun réad Monarcha a chruthú.

Déanann monarcha

  1. Cruthaigh réad / sampla Tóg an t-oibiacht / an t-ásc chruthaithe / tosaigh, cuir camchuairt ar an réad / sampla cruthaithe

Smaoinigh ar Angular Factory mar phatrún dearadh teibí monarchan chun an comhthéacs a shocrú. Ligeann AngularJS duit réad de do rogha féin a chruthú ag baint úsáide as do mhodh monarchan. Tugann tú an réad cruthaithe ar ais ionas gur féidir le d’iarratas é a úsáid mar sheirbhís.

Sa sampla seo a leanas, is féidir leat rogha a dhéanamh idir dhá gheata íocaíochta, le duine ag baint úsáide as do chód / leabharlann. Is féidir le do mhodh monarchan cinneadh a dhéanamh ar cheart réad Paypal nó Stripe a chruthú. Tá sé seo an-chosúil le Abstract Factory. Níl a fhios ag úsáideoirí PaymentService cén tseirbhís a úsáidtear don gheata íocaíochta.

var myModule = Angle.module ('myModule', []); myModule.constant ("PaymentGatewayName", "Stripe"); // nó "Paypal" myModule.factory ('paymentService', feidhm (PaymentGatewayName) {var payService; // socraíonn tú cén réad ba chóir a chruthú bunaithe ar na riachtanais ghnó // StripeGateway agus PaypalGateway atá ina ranganna JavaScript PaymentGatewayName == " Stripe ") {payService = nua StripeGateway (); // Cód saincheaptha chun an geata stiall a thionscnamh} eile (PaymentGatewayName == "Paypal") {paymentService = PaypalGateway () nua; // Cód saincheaptha chun Paypal} a thionscnamh} // Cód saincheaptha chun íocaíochtSeirbhís aisíocaíochtaSeirbhís a thosú;});

Más cosúil le cód seirbhíse mar seo, tabhair faoi deara an eochairfhocal "seo". Ciallaíonn sé seo gur chruthaigh Angular Core an réad duit féin cheana féin agus nach rialaíonn tú cruthú réad a thuilleadh.

var myModule = Angle.module ('myModule', []); ní féidir glaoch ar myModule.service ('Cache', feidhm () {var localVariable = ""; // lasmuigh de seo.cacheSize = 5; // 5 MB this.objectsSize = 1000; // uas 1000 réada seo.put = feidhm (eochair, luach) {...} this.get = feidhm (faigh) {filleadh ...}});

freagra 3:

An cheist mhór in AngularJS: Soláthraí Seirbhíse vs Monarcha v / s. Cad ba cheart dom a úsáid

Tá acmhainní gan áireamh ar an Idirlíon a phléann an topaic. Tarlaíonn sé go bhfuil an cheist seo fós ag teacht suas ar chainéil éagsúla gach seachtain nó mar sin, agus fiú tar éis na deich bhfreagra is fearr ar StackOverflow a léamh, níl sé an-soiléir fós.

Má cheapann tú go bhfuil siad cosúil lena chéile, tá an ceart agat. Tá siad an-chosúil. Go deimhin, tá siad uile mar an gcéanna. Is soláthraithe iad uile.

Léigh an t-alt iomlán -> AngularJS: Soláthraí Monarchan v / s Seirbhíse v / s - Ullmhaigh an t-agallamh i gceann 15 nóiméad