2013-04-11 6 views
33

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

असल में मुझे एक ऐप बनाने की ज़रूरत है जो विभिन्न ऐप्स के लिए एक पोर्टल के रूप में कार्य करेगी, प्रत्येक एक व्यावसायिक कार्यक्षमता का प्रतिनिधित्व करेगा (कभी-कभी एक दूसरे के साथ कोई संबंध नहीं है)।

ट्यूटोरियल में, वे दिखाते हैं कि एकाधिक दृश्यों के साथ एक ऐप कैसे बनाएं। मुझे जो चाहिए वह एक ऐप है जिसमें कई मॉड्यूल हैं, प्रत्येक मॉड्यूल के अपने विचार हैं (और शायद मैंने भी विचार साझा किए होंगे)।

क्या किसी ने इस तरह की संरचना के साथ एक ऐप पर काम किया है? क्या आप अपना अनुभव साझा कर सकते हैं और आपने चीजों को कैसे व्यवस्थित किया है?

एंगुलरजेएस बीज परियोजना (https://github.com/angular/angular-seed) अच्छा है लेकिन यह वास्तव में एक जटिल अनुप्रयोग बनाने का तरीका नहीं दिखाता है।

+0

यदि आपके पास एकाधिक ऐप्स नहीं हैं, तो आपको एक बड़ा ऐप बनाने की आवश्यकता नहीं है, केवल प्रति व्यवसाय एक ऐप बनाएं। एक ऐप अन्य ऐप्स सेवाओं, नियंत्रकों और निर्देश का पुन: उपयोग कर सकता है। याद रखें कि एक "वेब ऐप" अभी भी एक वेब पेज है, इससे कोई फर्क नहीं पड़ता कि यह डेस्कटॉप सॉफ़्टवेयर की तरह नहीं है। – mpm

+1

मैंने खुद को गलत तरीके से व्यक्त किया हो सकता है। मेरे पास केवल एक ऐप है, लेकिन यह बड़ा है। और मैं इसे विभिन्न व्यावसायिक मॉड्यूल में विभाजित करना चाहता हूं। प्रत्येक व्यापार मॉड्यूल में अपने स्वयं के विचार, निर्देश, नियंत्रक इत्यादि का सेट होगा ... लेकिन अंत में, यह एक ही वेब एप्लिकेशन है, केवल एक प्रविष्टि बिंदु के साथ। क्या यह एक अच्छा दृष्टिकोण है, और मुझे अपना कोड कैसे व्यवस्थित करना चाहिए? – Sam

+0

कोई फर्क नहीं पड़ता, आपकी इच्छा के अनुसार फ़ाइलों को विभाजित करने के लिए आप पर निर्भर है। कुछ लोग प्रति फ़ाइल, नियंत्रक या निर्देश 1 फ़ाइल का उपयोग करते हैं, कुछ लोग प्रति 'फीचर' को विभाजित करते हैं, वास्तव में निर्भरता इंजेक्शन की वजह से कोई फर्क नहीं पड़ता। आप कई फाइलों, आदि में एक मॉड्यूल फिर से खोल सकते हैं ... वास्तव में यह स्वाद का मामला है। अंत में आपको अपने एचटीएमएल में अपनी सभी जेएस फाइलों की ज़रूरत है। मेरे पास व्यक्तिगत रूप से बड़े ऐप्स के लिए 1 फ़ाइल प्रति प्रकार (सेवाओं के लिए 1 फ़ाइल, निर्देशों के लिए 1, नियंत्रकों के लिए 1) है। – mpm

उत्तर

31

[संपादित करें] मैं एक लेख अपने ब्लॉग पर लिखा है अधिक जानकारी के में चीजों को समझाने के लिए:

read it on sam-dev.net और अब आप read part II कोड नमूने के साथ कर सकते हैं,।

मैं अपने स्वयं के प्रश्न का उत्तर दूंगा। ऐसा नहीं है क्योंकि मुझे लगता है कि यह सबसे अच्छा तरीका है, लेकिन सिर्फ इसलिए कि मैंने इसे जाने का फैसला किया है।

यह मैं कैसे फ़ोल्डरों

  • एप्लिकेशन
    • businessModule
      • नियंत्रकों
        • index.js में अपने व्यवसाय मॉड्यूल विभाजित है
        • firstCtrl.js
        • 012,
        • secondCtrl।js
      • निर्देशों
      • सेवाओं
      • विचारों
      • फिल्टर
    • anotherBusinessModule
    • साझा
    • app.js
    • index.html

प्रत्येक मॉड्यूल नियंत्रकों, निर्देशों, आदि के लिए अपने स्वयं के फ़ोल्डर संरचना ...

प्रत्येक फ़ोल्डर एक index.js फ़ाइल है और उसके बाद प्रत्येक नियंत्रक, प्रत्येक निर्देश, आदि को अलग करती है के लिए अन्य फ़ाइलों है ..

index.js फ़ाइल में मॉड्यूल की परिभाषा शामिल है। उदाहरण के लिए व्यवसाय के नियंत्रकों के लिए उपरोक्त मॉड्यूल:

angular.module('myCompany.businessModule.controllers', []); 

यहां कोई निर्भरता नहीं है, लेकिन कोई भी हो सकता है।

फिर firstCtrl.js में, मुझे लगता है कि मॉड्यूल पुन: उपयोग और इसे करने के लिए नियंत्रक जोड़ सकते हैं:

angular.module('myCompany.businessModule.controllers').controller('firstCtrl',  

     function(){ 
}); 

फिर app.js उन्हें निर्भरता को जोड़कर सभी मॉड्यूल है कि मैं अपने आवेदन के लिए चाहते एकत्रित करता है सरणी।

angular.module('myApp', ['myCompany.businessModule', 'myCompany.anotherBusinessModule']); 

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

फिर से, मुझे नहीं पता कि यह सबसे अच्छा तरीका है, लेकिन यह निश्चित रूप से मेरे लिए काम करता है। शायद यह अन्य लोगों को प्रेरित कर सकता है।

संपादित

रूप index.js फ़ाइलों मॉड्यूल में घोषणा-पत्र, वे किसी भी अन्य अनुप्रयोग स्क्रिप्ट से पहले html पृष्ठ में संदर्भित किया जाना चाहिए। ऐसा करने के लिए, मैं का उपयोग किया है ASP.NET MVC 4 की IBundleOrderer:

var bundle = new ScriptBundle("~/bundles/app") { Orderer = new AsIsBundleOrderer() }; 
bundles.Add(bundle.IncludeDirectory("~/app", "*.js", true)); 

public class AsIsBundleOrderer : IBundleOrderer 
{ 
    public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files) 
    { 
     files = files.OrderBy(x => x.Name == "index.js" ? 0 : 1); 
     return files; 
    } 
} 
+0

दिलचस्प ... क्या आप कृपया मुझे दिखा सकते हैं कि आपने "स्क्रिप्ट" टैग कैसे व्यवस्थित किए हैं? – daveoncode

+0

मेरी पोस्ट में संपादित करें देखें। आपको अन्य एप्लिकेशन स्क्रिप्ट से पहले index.js स्क्रिप्ट डालना होगा। – Sam

+0

आप एक ऐप नियंत्रक में मॉड्यूल सेवा कैसे इंजेक्ट करते हैं? मैं आपके दृष्टिकोण का पालन करने के लिए कुछ समान कोशिश कर रहा हूं और अपना कोड संशोधित कर रहा हूं, लेकिन जब मैं अपने नियंत्रक में "myModule.x" सेवा इंजेक्ट करने का प्रयास करता हूं तो मुझे डरावना "अज्ञात प्रदाता: xProvider" त्रुटि मिल रही है। – jdp

3

आपको यमन https://github.com/yeoman/yeoman और यमन जनरेटर संरचना: https://github.com/yeoman/generator-angular पर जाना चाहिए, यह कोणीय-बीज से आवेदन सेटअप करने का एक बेहतर समाधान बन जाता है। विभिन्न व्यावसायिक मॉड्यूल के लिए, आप अलग-अलग ऐप्लिकेशन और साझा सेवाओं और निर्देशों बनाना चाहिए

+1

ठीक है, यमन वेबसाइट से: 'यह बीटा अभी तक विंडोज पर काम नहीं करता है। हम अंतिम रिलीज की ओर इसे ठीक करने के लिए कड़ी मेहनत करेंगे। ' मैं इसका उपयोग नहीं कर सकता :) :) – Sam

+0

यमन जनरेटर आपको "फ़ाइल प्रकार" संरचना प्रदान करता है, जो छोटे ऐप्स के लिए उपयुक्त है लेकिन जब आपका ऐप आईएमओ बढ़ता है तो वास्तव में बहुत अच्छा नहीं होता है। – Mat

1

ड्रा वापस मैं दृष्टिकोण Yeoman जनरेटर लेता है पाया है कि यह वास्तव में लाइनअप कोणीय मॉड्यूल के साथ तो यह महसूस नहीं करता करता है मेरे लिए बहुत मिलनसार इसलिए जब परियोजना बड़ी हो जाती है और आप किसी विशेष घटक पर काम कर रहे हैं तो मैंने खुद को स्रोत पेड़ में बहुत कुछ फिसल पाया।

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

+0

अब यह सबसे कोणीय ऐप्स के लिए अनुशंसित "जाने" संरचना है। – dmackerman

11

सैम विधि ज्यादातर मामलों में जाने का रास्ता हो रहा है। वर्तमान कोणीय दस्तावेज ने प्रत्येक नियंत्रक, सेवा इत्यादि के लिए एक मॉड्यूल के रूप में सेटअप किया है, लेकिन माइस्को द्वारा खुद को Google से विरोधाभास किया गया है।

Misko द्वारा हाल ही में एक Angularjs Best Practices वीडियो में, वह दिखाता है कि मॉड्यूल की संरचना परीक्षण में आसानी के साथ ही आसान स्केलिंग के लिए बाहर रखी जा सकती है। ध्यान रखें कि मॉड्यूल की संरचना कैसे करें, यह एक कोणीय ऐप के भीतर प्रदर्शन को प्रभावित नहीं करना चाहिए।

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

यदि आप सेटअप पर एक महान पढ़ना चाहते हैं तो an excellent post here इस परियोजना को स्थापित करने के संबंध में जहां आप सोचते हैं कि यह कहां जाएगा। https://github.com/sanfordredlich/angular-brunch-seed-modularized

यह तो आप बहुत जल्दी पृष्ठ रीलोड परीक्षण चल रहा है और ज्यादा पाने ब्रंच से सेट अप:

+4

कि AngularJS सर्वोत्तम अभ्यास vid गोल्ड है। – MFB

+0

वीडियो से बहुत कम जवाब: फीचर द्वारा मॉड्यूल विभाजित करें। ध्यान रखें कि एक निश्चित मॉड्यूल (उर्फ सुविधा) एकाधिक नियंत्रकों, सेवाओं आदि पर निर्भर हो सकता है, इसलिए यह उन सभी मॉड्यूल में रखने के लिए समझ में आता है। इस तरह, यदि आपको एप्लिकेशन के किसी अन्य भाग से कुछ फीचर चाहिए, तो बस इसी मॉड्यूल के लिए एक संदर्भ प्राप्त करें और आप जाने के लिए अच्छे हैं। – rmpt

2

जो लोग रुचि रखते हैं के लिए, मुझे लगता है कि Misko की सर्वोत्तम प्रथाओं के साथ बेहतर फिट बैठता है कोणीय बीज की एक "आधुनीकीकरण" संस्करण बनाया अधिक। आप तेजी से विकास कर सकते हैं और यदि आप कोड में पैटर्न का पालन करते हैं, तो आपके आवेदन को उचित रूप से अच्छी तरह से स्केल करना चाहिए। का आनंद लें!

संबंधित मुद्दे