javascript - AngularJS: एक कारखाना क्या है?




angularjs-factory (3)

मैं Angular.js पर बहुत सारे काम कर रहा हूं और कुल मिलाकर मुझे यह एक दिलचस्प और शक्तिशाली ढांचा लगता है।

मुझे पता है कि सेवा बनाम फैक्ट्री बनाम प्रदाता बनाम मूल्यों पर बहुत सी चर्चाएं हुई हैं, लेकिन मैं अभी भी Factory बारे में बहुत उलझन में हूं।

फैक्टरी को अन्य स्टैक ओवरफ्लो चर्चाओं में निम्नलिखित के रूप में परिभाषित किया गया है:

कारखाना

सिंटेक्स: module.factory( 'factoryName', function ); परिणाम: फैक्ट्रीनाम को इंजेक्शन योग्य तर्क के रूप में घोषित करते समय आपको मॉड्यूल.फैक्टरी को पारित फ़ंक्शन संदर्भ का आह्वान करके लौटाए गए मान के साथ प्रदान किया जाएगा।

मुझे यह स्पष्टीकरण समझना बहुत मुश्किल लगता है और यह कारखाने के बारे में मेरी समझ में वृद्धि नहीं करता है।

क्या किसी के पास कोई Factory है या Service , Provider या अन्य के बदले इसका उपयोग क्यों करना चाहिए इसके बारे में साझा करने के लिए किसी के पास कोई स्पष्टीकरण या वास्तविक जीवन उदाहरण होगा?

अद्यतन करें

एक service किसी भी वस्तु का संदर्भ रखती है

एक factory एक ऐसा कार्य है जो किसी भी वस्तु को वापस करता है

एक provider एक समारोह है जो किसी भी समारोह को देता है

- पूhew -


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

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

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

इस सवाल को देखें AngularJS: सेवा बनाम प्रदाता बनाम कारखाना

सूक्ष्म मतभेदों को समझने में यह भी सहायक मददगार हो सकता है।

स्रोत: https://groups.google.com/forum/#!topic/angular/hVrkvaHGOfc

जेएसफ़िल्ड: http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/

लेखक: Pawel Kozlowski

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

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

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

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

    this.name = 'Default';

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

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

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


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

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

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





angularjs-factory