मॉडल डेटा और व्यवहार कहां रखें? [Tl; डॉ; सेवाओं का उपयोग करें]


341

मैं अपने नवीनतम प्रोजेक्ट के लिए AngularJS के साथ काम कर रहा हूं। प्रलेखन और ट्यूटोरियल में सभी मॉडल डेटा को नियंत्रक दायरे में रखा गया है। मैं समझता हूं कि नियंत्रक के लिए उपलब्ध होना है और इस प्रकार संबंधित विचारों के भीतर होना है।

हालांकि मुझे नहीं लगता कि मॉडल को वास्तव में वहां लागू किया जाना चाहिए। यह जटिल हो सकता है और उदाहरण के लिए निजी विशेषताएँ हो सकती हैं। इसके अलावा एक अन्य संदर्भ / अनुप्रयोग में इसका पुन: उपयोग करना चाह सकते हैं। कंट्रोलर में सब कुछ डालने से एमवीसी पैटर्न पूरी तरह से टूट जाता है।

वही किसी भी मॉडल के व्यवहार के लिए सही है। अगर मैं DCI आर्किटेक्चर का उपयोग करता हूं और डेटा मॉडल से अलग व्यवहार करता हूं, तो मुझे व्यवहार को धारण करने के लिए अतिरिक्त वस्तुओं को पेश करना होगा। यह भूमिकाओं और संदर्भों को प्रस्तुत करने के द्वारा किया जाएगा।

डीसीआई == डी अता सी ollaboration मैं nteraction

बेशक मॉडल डेटा और व्यवहार को सादे जावास्क्रिप्ट वस्तुओं या किसी "क्लास" पैटर्न के साथ लागू किया जा सकता है। लेकिन इसे करने के लिए AngularJS तरीका क्या होगा? सेवाओं का उपयोग करना?

तो यह इस सवाल के लिए नीचे आता है:

एंगुलरजेएस सर्वोत्तम प्रथाओं का पालन करते हुए, आप नियंत्रक से डिकोड किए गए मॉडल को कैसे लागू करते हैं?


12
यदि आप DCI को परिभाषित कर सकते हैं या कम से कम वर्तनी फ़ॉर्म प्रदान कर सकते हैं तो मैं इस सवाल को वोट करूंगा। मैंने किसी भी सॉफ्टवेयर साहित्य में इसे संक्षिप्त रूप में नहीं देखा है। धन्यवाद।
जिम राडेन

13
मैंने सिर्फ एक संदर्भ के रूप में डीसीआई के लिए एक लिंक जोड़ा।
निल्स ब्लम-ओस्टे

1
@JimRaden DCI Dataq, Context, इंटरैक्शन है और सबसे पहले MVC (ट्राएगवे रीन्सक्युज) के पिता द्वारा तैयार किया गया एक प्रतिमान है। अब तक इस विषय पर काफी कुछ लिखा है। एक अच्छा पढ़ा है कोपलियन और Bjørnvig "झुक वास्तुकला"
FS

3
धन्यवाद। बेहतर या बदतर के लिए, ज्यादातर लोग अब तक मूल साहित्य के बारे में नहीं जानते हैं। Google के अनुसार, MVC के बारे में 55 मिलियन लेख हैं, लेकिन केवल 250,000 में ही MCI और MVC का उल्लेख है। और Microsoft.com पर? 7. AngularJS.org डीसीआई के संक्षिप्त नाम का भी उल्लेख नहीं करता है: "आपकी खोज - साइट: angularjs.org dci - किसी भी दस्तावेज़ से मेल नहीं खाती"।
जिम राडेन

संसाधन ऑब्जेक्ट मूल रूप से Angular.js में मॉडल हैं .. उन्हें विस्तारित कर रहा हूं।
सलमान ने अब्बास

जवाबों:


155

यदि आप कई नियंत्रकों द्वारा उपयोग करने योग्य कुछ चाहते हैं तो आपको सेवाओं का उपयोग करना चाहिए। यहाँ एक सरल विपरीत उदाहरण दिया गया है:

myApp.factory('ListService', function() {
  var ListService = {};
  var list = [];
  ListService.getItem = function(index) { return list[index]; }
  ListService.addItem = function(item) { list.push(item); }
  ListService.removeItem = function(item) { list.splice(list.indexOf(item), 1) }
  ListService.size = function() { return list.length; }

  return ListService;
});

function Ctrl1($scope, ListService) {
  //Can add/remove/get items from shared list
}

function Ctrl2($scope, ListService) {
  //Can add/remove/get items from shared list
}

23
एक मॉडल के रूप में केवल एक जावास्क्रिप्ट जावास्क्रिप्ट ऑब्जेक्ट बनाने और नियंत्रक क्षेत्र में इसे निर्दिष्ट करने पर एक सेवा का उपयोग करने से क्या लाभ होगा?
निल्स ब्लम-ओस्ट

22
आप कई नियंत्रकों के बीच साझा एक ही तर्क की जरूरत है इसके अलावा, इस तरह से चीजों को स्वतंत्र रूप से परखना आसान है।
एंड्रयू जोसलीन

1
चूसा हुआ आखिरी उदाहरण, यह एक अधिक समझ में आता है। मैंने इसे संपादित किया।
एंड्रयू जोसलिन

9
हाँ, एक सादे पुराने जावास्क्रिप्ट ऑब्जेक्ट के साथ आप अपने लिस्ट सर्विस में कोणीय कुछ भी इंजेक्ट नहीं कर पाएंगे। इस उदाहरण की तरह, यदि आपको शुरू में सूची डेटा को पुनः प्राप्त करने के लिए $ http.get की आवश्यकता है, या यदि आपको $ rootScope को इंजेक्ट करने की आवश्यकता है, तो आप $ ब्रॉडकास्ट ईवेंट को प्रसारित कर सकते हैं।
एंड्रयू जोसलिन

1
इस उदाहरण को और अधिक डीसीआई बनाने के लिए जैसे डेटा लिस्ट सर्विस के बाहर नहीं होना चाहिए?
PiNNumber

81

मैं वर्तमान में इस पैटर्न की कोशिश कर रहा हूं, जो डीसीआई नहीं है, लेकिन एक शास्त्रीय सेवा / मॉडल डिकॉउलिंग (वेब ​​सेवाओं (उर्फ मॉडल सीआरयूडी) से बात करने के लिए सेवाएं, और ऑब्जेक्ट गुणों और विधियों को परिभाषित करने वाला मॉडल) प्रदान करता है।

ध्यान दें कि मैं केवल इस पैटर्न का उपयोग करता हूं जब भी मॉडल ऑब्जेक्ट को अपने गुणों पर काम करने के तरीकों की आवश्यकता होती है , तो मैं शायद हर जगह (जैसे कि बेहतर गेट्टर / सेटर) का उपयोग करूंगा। मैं हर सेवा के लिए व्यवस्थित रूप से ऐसा करने की वकालत नहीं कर रहा हूँ ।

संपादित करें: मैं सोचता था कि यह पैटर्न "कोणीय मॉडल सादे पुराने जावास्क्रिप्ट ऑब्जेक्ट" मंत्र के खिलाफ जाएगा, लेकिन यह अब मुझे लगता है कि यह पैटर्न पूरी तरह से ठीक है।

EDIT (2): यहां तक ​​कि स्पष्ट होने के लिए, मैं केवल मॉडल को साधारण गेटर्स / सेटर्स (उदाहरण के लिए, व्यू टेम्प्लेट में उपयोग किए जाने के लिए) का उपयोग करता हूं। बड़े व्यावसायिक तर्क के लिए, मैं अलग-अलग सेवा (ओं) का उपयोग करने की सलाह देता हूं जो मॉडल के बारे में "जानते हैं", लेकिन उन्हें उनसे अलग रखा जाता है, और केवल व्यावसायिक तर्क के लिए। यदि आप चाहते हैं, तो इसे "व्यवसाय विशेषज्ञ" सेवा परत कहें

सेवा / ElementServices.js (नोटिस कि घोषणा में तत्व कैसे इंजेक्ट किया जाता है)

MyApp.service('ElementServices', function($http, $q, Element)
{
    this.getById = function(id)
    {
        return $http.get('/element/' + id).then(
            function(response)
            {
                //this is where the Element model is used
                return new Element(response.data);
            },
            function(response)
            {
                return $q.reject(response.data.error);
            }
        );
    };
    ... other CRUD methods
}

मॉडल / Element.js (ऑब्जेक्ट निर्माण के लिए एंगुलरज फैक्टरी का उपयोग करके)

MyApp.factory('Element', function()
{
    var Element = function(data) {
        //set defaults properties and functions
        angular.extend(this, {
            id:null,
            collection1:[],
            collection2:[],
            status:'NEW',
            //... other properties

            //dummy isNew function that would work on two properties to harden code
            isNew:function(){
                return (this.status=='NEW' || this.id == null);
            }
        });
        angular.extend(this, data);
    };
    return Element;
});

4
मैं बस कोणीय में हो रहा हूं, लेकिन मुझे यह जानने के लिए उत्सुक होना चाहिए कि क्या / क्यों दिग्गजों को लगता है कि यह विधर्म है। यह संभवत: वह तरीका है जो मैं शुरू में इसे भी कहूंगा। क्या कोई प्रतिक्रिया दे सकता है?
आरोनियस

2
@Aaronius सिर्फ स्पष्ट होने के लिए: मैं वास्तव में कभी नहीं पढ़ा है "आपको कभी भी ऐसा नहीं करना चाहिए" किसी भी कोणीयjs डॉक्टर या ब्लॉग पर, लेकिन मैंने हमेशा "angularjs जैसी चीजों को पढ़ा है, इसके लिए एक मॉडल की आवश्यकता नहीं है, यह सिर्फ सादे पुराने जावास्क्रिप्ट का उपयोग कर रहा है" , और मुझे इस पैटर्न को अपने दम पर खोजना था। चूंकि यह अंगुलरजेएस पर मेरी पहली वास्तविक परियोजना है, इसलिए मैं उन मजबूत चेतावनियों को रख रहा हूं, ताकि लोग पहले बिना सोचे-समझे कॉपी / पेस्ट न करें।
बेन जी

मैं लगभग इसी तरह के पैटर्न पर बस गया हूं। यह शर्म की बात है कि कोणीय का कोई वास्तविक समर्थन नहीं है (या समर्थन की इच्छा है) "शास्त्रीय" अर्थ में एक मॉडल।
drt

3
यह मेरे लिए एक पाषंड नहीं दिखता है, आप उन वस्तुओं के लिए कारखानों का उपयोग कर रहे हैं जिनके लिए वे बनाए गए थे: वस्तुओं का निर्माण। मेरा मानना ​​है कि "कोणीय व्यक्ति को मॉडल की आवश्यकता नहीं है" वाक्यांश का अर्थ है "आपको कोणीय में मॉडल के साथ काम करने के लिए एक विशेष वर्ग से विरासत में प्राप्त करने की आवश्यकता नहीं है, या विशेष तरीकों (जैसे ko.observable, नॉकआउट में) का उपयोग करें शुद्ध js वस्तु पर्याप्त होगी ”।
फेलिप कास्त्रो

1
लगभग समान फ़ाइलों के एक समूह में प्रत्येक संग्रह परिणाम के लिए एक उचित नाम ElementService नहीं होगा?
कोलिन एलन

29

Angularjs प्रलेखन स्पष्ट रूप से बताता है:

कई अन्य रूपरेखाओं के विपरीत, कोणीय मॉडल पर कोई प्रतिबंध या आवश्यकता नहीं बनाता है। मॉडल तक पहुंचने या बदलने के लिए विशेष अभिगम विधियों से विरासत में कोई वर्ग नहीं हैं। मॉडल आदिम, ऑब्जेक्ट हैश या पूर्ण ऑब्जेक्ट प्रकार हो सकता है। संक्षेप में मॉडल एक सादे जावास्क्रिप्ट वस्तु है।

- AngularJS डेवलपर गाइड - V1.5 अवधारणाओं - मॉडल

तो इसका मतलब है कि आप पर निर्भर है कि किसी मॉडल को कैसे घोषित किया जाए। यह एक सरल जावास्क्रिप्ट वस्तु है।

मैं व्यक्तिगत रूप से कोणीय सेवाओं का उपयोग नहीं करूंगा क्योंकि वे एकल वस्तुओं की तरह व्यवहार करने के लिए थे जिनका आप उपयोग कर सकते हैं, उदाहरण के लिए, अपने आवेदन में वैश्विक राज्यों को रखने के लिए।


आपको प्रलेखन में यह कहा गया है कि आपको एक लिंक प्रदान करना चाहिए। मैंने "एंगुलर ने मॉडल पर कोई प्रतिबंध या आवश्यकता नहीं है" के लिए एक Google खोज की , और यह आधिकारिक डॉक्स में कहीं भी नहीं मुड़ता है, जहां तक ​​मैं बता सकता हूं।

4
यह पुराने एंगुलरज डॉक्स (उत्तर देते समय एक जीवित) में था: github.com/gitsome/docular/blob/master/lib/angular/ngdocs/guide/…
SC

8

DCI एक प्रतिमान है और ऐसा करने का कोई कोणीय तरीका नहीं है, या तो भाषा DCI का समर्थन करती है या ऐसा नहीं करती है। यदि आप स्रोत परिवर्तन का उपयोग करने के लिए तैयार हैं और कुछ कमियों के साथ यदि आप नहीं हैं तो जेएस डीसीआई का समर्थन करते हैं। फिर से DCI के पास निर्भरता इंजेक्शन के साथ ऐसा करने के लिए अधिक नहीं है, जैसा कि एक C # वर्ग के पास है और निश्चित रूप से एक सेवा भी नहीं है। तो सबसे अच्छा तरीका है DCI को angulusJS के साथ करना DCI JS तरीका है, जो DCI को पहले स्थान पर बनाने के तरीके के बहुत करीब है। जब तक आप स्रोत परिवर्तन नहीं करते हैं, तब तक आप इसे पूरी तरह से नहीं कर पाएंगे क्योंकि भूमिका विधियाँ संदर्भ के बाहर भी वस्तु का हिस्सा होंगी लेकिन आमतौर पर यह विधि इंजेक्शन आधारित DCI के साथ समस्या है। अगर आप fullOO.info को देखते हैंDCI के लिए आधिकारिक साइट पर आप रूबी कार्यान्वयन पर एक नज़र डाल सकते हैं, वे विधि इंजेक्शन का भी उपयोग करते हैं या DCI के बारे में अधिक जानकारी के लिए आप यहाँ देख सकते हैं । यह ज्यादातर RUby उदाहरणों के साथ है, लेकिन DCI सामान अज्ञेय है। DCI की एक कुंजी यह है कि सिस्टम जो करता है वह सिस्टम से अलग है। तो डेटा ऑब्जेक्ट बहुत गूंगा है, लेकिन एक बार एक संदर्भ भूमिका विधियों में एक भूमिका से बंधे हुए कुछ व्यवहार को उपलब्ध करते हैं। एक भूमिका बस एक पहचानकर्ता है, इससे ज्यादा कुछ नहीं, जब उस पहचानकर्ता के माध्यम से किसी वस्तु तक पहुंच होती है तो भूमिका विधियां उपलब्ध होती हैं। कोई भूमिका वस्तु / वर्ग नहीं है। विधि इंजेक्शन के साथ भूमिका पद्धतियों का परिमार्जन ठीक वर्णित नहीं है, लेकिन करीब है। जेएस में एक संदर्भ का एक उदाहरण हो सकता है

function transfer(source,destination){
   source.transfer = function(amount){
        source.withdraw(amount);
        source.log("withdrew " + amount);
        destination.receive(amount);
   };
   destination.receive = function(amount){
      destination.deposit(amount);
      destination.log("deposited " + amount);
   };
   this.transfer = function(amount){
    source.transfer(amount);
   };
}

1
DCI सामान को विस्तृत करने के लिए धन्यवाद। यह एक बेहतरीन रीड है। लेकिन मेरा सवाल वास्तव में "जहां ऑब्जेक्ट्स को कोणीयज में रखा जाना है" का उद्देश्य है। डीसीआई केवल संदर्भ के लिए वहां है, कि मेरे पास न केवल एक मॉडल हो सकता है, बल्कि इसे डीसीआई तरीके से विभाजित किया जा सकता है। प्रश्न को अधिक स्पष्ट करने के लिए संपादित करेगा।
निल्स ब्लम-ओस्ट

7

AngularJS में मॉडल के बारे में यह लेख मदद कर सकता है:

http://joelhooks.com/blog/2013/04/24/modeling-data-and-state-in-your-angularjs-application/


7
ध्यान दें कि लिंक-केवल उत्तर हतोत्साहित किए जाते हैं, एसओ उत्तर एक समाधान के लिए खोज का अंतिम बिंदु होना चाहिए (बनाम संदर्भों का एक और ठहराव, जो समय के साथ बासी हो जाते हैं)। कृपया लिंक को संदर्भ के रूप में रखते हुए, यहां एक स्टैंड-अलोन सिनोप्सिस जोड़ने पर विचार करें।
क्लेओपेट्रा

सवाल पर एक टिप्पणी में इस तरह के लिंक को जोड़ना हालांकि ठीक होगा।
जोरेबर

यह लिंक वास्तव में एक बहुत अच्छा लेख है, लेकिन
डीआईटीओ

5

जैसा कि अन्य पोस्टरों द्वारा कहा गया है, एंगुलर मॉडलिंग के लिए कोई आउट-ऑफ-द-बॉक्स आधार वर्ग प्रदान नहीं करता है, लेकिन कोई भी उपयोगी तरीके से कई सुविधाएं प्रदान कर सकता है:

  1. एक RESTful एपीआई के साथ बातचीत और नई वस्तुओं को बनाने के लिए तरीके
  2. मॉडल के बीच संबंध स्थापित करना
  3. बैकएंड को जारी रखने से पहले डेटा को मान्य करना; वास्तविक समय की त्रुटियों को प्रदर्शित करने के लिए भी उपयोगी है
  4. बेकार HTTP अनुरोध करने से रखने के लिए कैशिंग और आलसी-लोडिंग
  5. राज्य मशीन हुक (पहले / बाद में सहेजें, अपडेट, बनाएं, नया, आदि)

एक पुस्तकालय जो इन सभी चीजों को अच्छी तरह से करता है वह है ngActiveResource ( https://github.com/FacademyCreative/ngActiveResource )। पूर्ण प्रकटीकरण - मैंने इस पुस्तकालय को लिखा है - और मैंने इसका उपयोग उद्यम-स्तर के कई अनुप्रयोगों के निर्माण में सफलतापूर्वक किया है। यह अच्छी तरह से परीक्षण किया गया है, और एक एपीआई प्रदान करता है जो रेल डेवलपर्स से परिचित होना चाहिए।

मेरी टीम और मैं इस पुस्तकालय को सक्रिय रूप से विकसित करना जारी रखते हैं, और मुझे यह देखना अच्छा लगता है कि अधिक कोणीय डेवलपर्स इसे योगदान देते हैं और युद्ध का परीक्षण करते हैं।


अरे! यह वास्तव में बहुत अच्छा है! मैं इसे अभी अपने ऐप में प्लग करूंगा। युद्ध परीक्षण अभी शुरू हुआ।
जे। ब्रुनी

1
मैं सिर्फ आपकी पोस्ट देख रहा था और सोच रहा था कि आपकी ngActiveResourceऔर कोणीय $resourceसेवा के बीच क्या अंतर है । मैं कोणीय के लिए थोड़ा नया हूँ, और जल्दी से डॉक्स के दोनों सेटों को ब्राउज़ कर रहा हूं, लेकिन वे बहुत अधिक ओवरलैप की पेशकश करते हैं। क्या सेवा उपलब्ध होने ngActiveResourceसे पहले विकसित की गई थी $resource?
एरिक बी।

5

एक पुराना सवाल है, लेकिन मुझे लगता है कि यह विषय पहले से कहीं ज्यादा प्रासंगिक है, जिसे एंगुलर 2.0 की नई दिशा दी गई है। मैं कहूंगा कि एक सर्वोत्तम प्रथा कोड को किसी विशेष ढांचे पर निर्भरता के साथ संभव के रूप में लिखना है। केवल फ्रेमवर्क विशिष्ट भागों का उपयोग करें जहां यह प्रत्यक्ष मूल्य जोड़ता है।

वर्तमान में ऐसा लगता है कि कोणीय सेवा कुछ अवधारणाओं में से एक है जो इसे अगली पीढ़ी की कोणीय बना देगी, इसलिए यह संभव है कि सभी तर्कों को सेवाओं तक ले जाने के सामान्य दिशानिर्देश का पालन करना स्मार्ट हो। हालांकि, मेरा तर्क है कि आप कोणीय सेवाओं पर प्रत्यक्ष निर्भरता के बिना भी डिकॉउंडेड मॉडल बना सकते हैं। केवल आवश्यक निर्भरता और जिम्मेदारियों के साथ स्वयं निहित वस्तुओं का निर्माण शायद जाने का रास्ता है। यह स्वचालित परीक्षण करते समय जीवन को बहुत आसान बना देता है। एकल जिम्मेदारी इन दिनों एक चर्चा का काम है, लेकिन यह बहुत मायने रखता है!

यहाँ एक पेटेंट का एक उदाहरण है जिसे मैं डोम से ऑब्जेक्ट मॉडल को हटाने के लिए अच्छा मानता हूं।

http://www.syntaxsuccess.com/viewarticle/548ebac8ecdac75c8a09d58e

एक महत्वपूर्ण लक्ष्य अपने कोड को इस तरह से संरचना करना है जो एक इकाई परीक्षणों से एक दृश्य के रूप में उपयोग करना आसान बनाता है। यदि आप प्राप्त करते हैं कि आप यथार्थवादी और उपयोगी परीक्षण लिखने के लिए अच्छी तरह से तैनात हैं।


4

मैंने इस ब्लॉग पोस्ट में उस सटीक मुद्दे से निपटने की कोशिश की है ।

मूल रूप से, डेटा मॉडलिंग के लिए सबसे अच्छा घर सेवाओं और कारखानों में है। हालांकि, इस बात पर निर्भर करता है कि आप अपने डेटा और आपके द्वारा आवश्यक व्यवहार की जटिलता को कैसे पुनः प्राप्त करते हैं, कार्यान्वयन के बारे में बहुत सारे तरीके हैं। वर्तमान में कोणीय का कोई मानक तरीका या सर्वोत्तम अभ्यास नहीं है।

$ Http , $ संसाधन और रेस्टैंगुलर का उपयोग करते हुए पोस्ट तीन दृष्टिकोणों को शामिल करती है

getResult()नौकरी मॉडल पर एक कस्टम विधि के साथ प्रत्येक के लिए कुछ उदाहरण कोड यहां दिए गए हैं :

रेस्टैंगुलर (आसान मटर):

angular.module('job.models', [])
  .service('Job', ['Restangular', function(Restangular) {
    var Job = Restangular.service('jobs');

    Restangular.extendModel('jobs', function(model) {
      model.getResult = function() {
        if (this.status == 'complete') {
          if (this.passed === null) return "Finished";
          else if (this.passed === true) return "Pass";
          else if (this.passed === false) return "Fail";
        }
        else return "Running";
      };

      return model;
    });

    return Job;
  }]);

$ संसाधन (थोड़ा और अधिक दृढ़):

angular.module('job.models', [])
    .factory('Job', ['$resource', function($resource) {
        var Job = $resource('/api/jobs/:jobId', { full: 'true', jobId: '@id' }, {
            query: {
                method: 'GET',
                isArray: false,
                transformResponse: function(data, header) {
                    var wrapped = angular.fromJson(data);
                    angular.forEach(wrapped.items, function(item, idx) {
                        wrapped.items[idx] = new Job(item);
                    });
                    return wrapped;
                }
            }
        });

        Job.prototype.getResult = function() {
            if (this.status == 'complete') {
                if (this.passed === null) return "Finished";
                else if (this.passed === true) return "Pass";
                else if (this.passed === false) return "Fail";
            }
            else return "Running";
        };

        return Job;
    }]);

$ http (कट्टर):

angular.module('job.models', [])
    .service('JobManager', ['$http', 'Job', function($http, Job) {
        return {
            getAll: function(limit) {
                var params = {"limit": limit, "full": 'true'};
                return $http.get('/api/jobs', {params: params})
                  .then(function(response) {
                    var data = response.data;
                    var jobs = [];
                    for (var i = 0; i < data.objects.length; i ++) {
                        jobs.push(new Job(data.objects[i]));
                    }
                    return jobs;
                });
            }
        };
    }])
    .factory('Job', function() {
        function Job(data) {
            for (attr in data) {
                if (data.hasOwnProperty(attr))
                    this[attr] = data[attr];
            }
        }

        Job.prototype.getResult = function() {
            if (this.status == 'complete') {
                if (this.passed === null) return "Finished";
                else if (this.passed === true) return "Pass";
                else if (this.passed === false) return "Fail";
            }
            else return "Running";
        };

        return Job;
    });

ब्लॉग पोस्ट स्वयं इस तर्क पर अधिक विस्तार में जाता है कि आप प्रत्येक दृष्टिकोण का उपयोग क्यों कर सकते हैं, साथ ही अपने नियंत्रकों में मॉडल का उपयोग करने के कोड उदाहरण भी दे सकते हैं:

एंगुलरजेएस डेटा मॉडल: $ http वी.एस. $ संसाधन वीएस रेस्टेंगुलर

एक संभावना है कि कोणीय 2.0 डेटा मॉडलिंग के लिए अधिक मजबूत समाधान प्रदान करेगा जो सभी को एक ही पृष्ठ पर मिलता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.