दिलचस्प पोस्ट
संदर्भ से गुजारें या मूल्य से गुजारें? निर्भरता इंजेक्शन के संदर्भ में एक संरचना रूट क्या है PHP में हैशिंग पासवर्ड के लिए आप बीक्रीप का उपयोग कैसे करते हैं? MySQL द्वारा पहले समूह द्वारा आदेश चयनकर्ता छवियां प्रोग्राम को प्रतिस्थापित करें प्रत्येक `गूंज 'कॉल के बाद आउटपुट कैसे फ्लश करें? जावा में बाह्य कार्यक्रम निष्पादित करें मैं अपने वेब पेज पर सही क्लिक कैसे अक्षम करूं? स्प्रिंग के जेडीबीसीटीप्लेप्लेट के साथ में () एसक्यूएल क्वेरी कैसे कार्यान्वित करें? सरल एक्सएमएल – नोड्स में कॉलन से निपटना मैं एक सटीक समय कैसे प्राप्त कर सकता हूं, उदाहरण के लिए उद्देश्य सी में मिलीसेकंड में? कैसे एक git दूरस्थ टैग को हटाने के लिए? लिंक को क्लिक करने के बाद फ़ाइल को सहेजने के लिए एक ब्राउज़र को बल दें PHP में एक सरणी के सबसेट ढूँढना सिस्टम जहां 1 बाइट! = 8 बिट?

अगर मैं एक jQuery की पृष्ठभूमि है "AngularJS में सोच"

मान लीजिए कि मैं jQuery में क्लाइंट-साइड एप्लिकेशन विकसित करने से परिचित हूं, लेकिन अब मैं AngularJS का उपयोग करना शुरू करना चाहता हूं। क्या आप प्रतिमान बदलाव का वर्णन कर सकते हैं जो आवश्यक है? यहां कुछ सवाल हैं जो आपको एक जवाब देने में मदद कर सकते हैं:

  • मैं क्लाइंट-साइड वेब एप्लिकेशन को आर्किटेक्ट और डिज़ाइन कैसे अलग तरीके से कर सकता हूं? सबसे बड़ा अंतर क्या है?
  • मुझे क्या करना / प्रयोग करना बंद करना चाहिए; इसके बजाय मुझे क्या करना चाहिए / प्रयोग करना चाहिए?
  • क्या कोई सर्वर-पक्ष विचार / प्रतिबंध हैं?

मैं jQuery और AngularJS बीच एक विस्तृत तुलना नहीं देख रहा हूँ

वेब के समाधान से एकत्रित समाधान "अगर मैं एक jQuery की पृष्ठभूमि है "AngularJS में सोच""

आज्ञाकारी → घोषणात्मक

JQuery में, चयनकर्ताओं को DOM तत्वों को खोजने के लिए उपयोग किया जाता है और फिर उन्हें ईवेंट हैंडलर बाँध / रजिस्टर करें। जब कोई ईवेंट ट्रिगर करता है, तो (अनिवार्य) कोड को अद्यतन / DOM को बदलने के लिए कार्यान्वित किया जाता है

AngularJS में, आप DOM तत्वों के बजाय विचारों के बारे में सोचना चाहते हैं दृश्य (घोषणात्मक) एचटीएमएल है जिसमें एंज्यूलर जे एस निर्देश शामिल हैं। निर्देश हमारे लिए पर्दे के पीछे ईवेंट हैंडलर स्थापित करते हैं और हमें डायनामिक डाटाबेसिंग देते हैं। चयनकर्ताओं का उपयोग शायद ही कभी होता है, इसलिए आईडी (और कुछ प्रकार की कक्षाएं) की आवश्यकता बहुत कम हो गई है। दृश्य मॉडल से जुड़े हुए हैं (स्कोप के माध्यम से) दृश्य मॉडल की प्रक्षेपण हैं घटनाक्रम मॉडल बदलते हैं (अर्थात, डेटा, दायरा गुण), और उन मॉडलों को प्रोजेक्ट करने वाले विचार "स्वचालित रूप से" अद्यतन करते हैं।

AngularJS में, jQuery के चुने हुए DOM तत्वों के बजाय आपके डेटा को रखने वाले मॉडल के बारे में सोचें। उन मॉडलों के अनुमानों के बारे में विचार करें, जो उपयोगकर्ताओं को देखता है कि हेरफेर करने के लिए कॉलबैक दर्ज करने के बजाय उन मॉडलों के बारे में सोचता है।

चिंताओ का विभाजन

jQuery का प्रयोग स्वाभाविक जावास्क्रिप्ट – व्यवहार (जावास्क्रिप्ट) को रोजगार से अलग किया गया है (एचटीएमएल)।

AngularJS दृश्य / संरचना (एचटीएमएल) से व्यवहार को दूर करने के लिए नियंत्रकों और निर्देशों का उपयोग करता है (जिनमें से प्रत्येक का अपना नियंत्रक, और / या संकलन और लिंकिंग फ़ंक्शंस हो सकता है)। कोनेरी में आपके एप्लिकेशन को अलग / व्यवस्थित करने में सहायता के लिए सेवाओं और फ़िल्टर भी हैं।

यह भी देखें https://stackoverflow.com/a/14346528/215945

आवेदन डिजाइन

अंगुलियोज़ एप्लिकेशन को डिजाइन करने के लिए एक दृष्टिकोण:

  1. अपने मॉडल के बारे में सोचो उन मॉडलों के लिए सेवाओं या अपनी जावास्क्रिप्ट ऑब्जेक्ट बनाएँ
  2. इस बारे में सोचें कि आप अपने मॉडलों को कैसे प्रस्तुत करना चाहते हैं – आपके विचार डायनेमिक डाटाबेसिंग के लिए आवश्यक निर्देशों का उपयोग करके प्रत्येक दृश्य के लिए HTML टेम्पलेट्स बनाएं।
  3. प्रत्येक दृश्य के लिए एक नियंत्रक संलग्न करें (एनजी-दृश्य और रूटिंग, या एनजी-नियंत्रक का उपयोग करके) नियंत्रक को केवल नौसिखिए आंकड़े मिलें / मिलें, इसके काम को देखने की जरूरत है। संभव के रूप में नियंत्रक के रूप में पतली बनाओ

प्रोटोटाइप विरासत

आप JavaScript के साथ बहुत कुछ कर सकते हैं बिना जावास्क्रिप्ट प्रोटोटाइप विरासत कैसे काम करता है जानने के बिना। जब आप AngularJS अनुप्रयोगों का विकास करते हैं, तो आप कुछ आम नुकसान से बचेंगे, अगर आपको जावास्क्रिप्ट विरासत की अच्छी समझ है अनुशंसित पठन: अंगुलोज़ में गुंजाइश प्रोटोटाइप / प्रोटोटाइपिकल विरासत की बारीकियों क्या हैं?

AngularJS बनाम। JQuery

AngularJS और jQuery बहुत अलग विचारधारा अपनाने यदि आप jQuery से आ रहे हैं तो आपको आश्चर्य की बात हो सकती है। कोणीय आपको गुस्से में कर सकता है।

यह सामान्य है, आपको इसके माध्यम से धक्का देना चाहिए। कोणीय इसके लायक है

बड़ा अंतर (टीएलडीआर)

jQuery आपको DOM के मनमाने बिट्स को चुनने के लिए टूलकिट देता है और उनके लिए तदर्थ परिवर्तन करता है। तुम्हे टुकड़े करके तुम्हे बहुत पसंद करते हैं।

AngularJS बजाय आपको एक कंपाइलर देता है

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

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

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

इसका अर्थ है कि कोणीय टेम्पलेट संचालित है आपका टेम्प्लेट जावास्क्रिप्ट चलाता है, दूसरी तरफ नहीं है यह भूमिकाओं का एक कट्टरपंथी उत्क्रमण है, और विवादास्पद जावास्क्रिप्ट के पूर्ण विपरीत हम पिछले 10 वर्षों या इतने के लिए लिख रहे हैं। यह कुछ करने के लिए इस्तेमाल किया जा सकता है

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

चलो nitty किरकिरा करने के लिए नीचे उतरो

सबसे पहले, कोणीय jQuery का स्थान नहीं लेता है

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

Misko jQuery पसंद करता है और आप इसे उपयोग करने के लिए वस्तु नहीं है हालांकि आप जितना आगे बढ़ेंगे उतना ही आप पाएंगे कि आप दायरे, टेम्पलेट्स और डायरेक्टिव्स के संयोजन का उपयोग करके अपने सभी काम को बहुत अधिक प्राप्त कर सकते हैं, और आपको संभवतः इस वर्कफ़्लो को पसंद करना चाहिए क्योंकि आपका कोड अधिक असतत, अधिक विन्यास और अधिक होगा कोणीय।

यदि आप jQuery का उपयोग करते हैं, तो आपको इसे पूरे स्थान पर छिड़का नहीं जाना चाहिए। AngularJS में डोम हेरफेर के लिए सही स्थान एक निर्देश में है। बाद में इन पर अधिक।

चयनकर्ता बनाम घोषणात्मक टेम्पलेट्स के साथ अविश्वासी जावास्क्रिप्ट

jQuery आम तौर पर अप्रतिबंधित रूप से लागू किया जाता है। आपका जावास्क्रिप्ट कोड हेडर (या पाद लेख) में लिंक है, और यह एकमात्र ऐसा स्थान है जिसका उल्लेख किया गया है। हम पृष्ठ के बिट्स को चुनने के लिए चयनकर्ताओं का उपयोग करते हैं और उन भागों को संशोधित करने के लिए प्लगइन्स लिखते हैं।

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

AngularJS के बारे में आपकी पहली सूचनाओं में से एक यह है कि कस्टम विशेषताएँ हर जगह हैं आपका एचटीएमएल एनजी एट्रिब्यूट्स से भरेगा, जो स्टिरॉइड पर अनिवार्य रूप से onClick एट्रिब्यूट्स हैं। ये निर्देश (कंपाइलर निर्देश) हैं, और वे मुख्य तरीकों में से एक हैं, जिसमें टेम्प्लेट को मॉडल से जोड़ा गया है।

जब आप इसे पहली बार देखते हैं, तो आपको AngularJS को पुराने स्कूल घुसपैठ जावास्क्रिप्ट के रूप में लिखने का मोहक हो सकता है (जैसे मैंने पहले किया था)। वास्तव में, AngularJS उन नियमों द्वारा नहीं खेलता है AngularJS में, आपका HTML5 एक टेम्पलेट है। यह आपके वेब पेज को तैयार करने के लिए AngularJS द्वारा संकलित किया गया है

यह पहला बड़ा अंतर है JQuery के लिए, आपका वेब पेज हेरफेर करने के लिए एक DOM है AngularJS को, आपका HTML कोड संकलित किया जाना है। AngularJS आपके संपूर्ण वेब पेज में पढ़ता है और शाब्दिक रूप से इसे अपने नए सिरे से संकलित करने वाले कंपाइलर का उपयोग करके वेब पेज में संकलित करता है।

आपका टेम्पलेट घोषणापत्र होना चाहिए; इसका अर्थ केवल इसे पढ़कर स्पष्ट होना चाहिए हम सार्थक नामों के साथ कस्टम विशेषताओं का उपयोग करते हैं हम नए एचटीएमएल तत्व बनाते हैं, फिर अर्थपूर्ण नामों के साथ। न्यूनतम डिजाइन के साथ एक डिजाइनर और कोई कोडिंग कौशल आपके AngularJS टेम्पलेट को पढ़ सकता है और समझ सकता है कि यह क्या कर रहा है। वह संशोधन कर सकता है यह कोण का तरीका है

टेम्पलेट ड्राइविंग सीट में है।

पहला प्रश्न मैंने स्वयं से पूछा जब AngularJS शुरू किया और ट्यूटोरियल के माध्यम से चल रहा है "मेरा कोड कहां है?" । मैंने कोई जावास्क्रिप्ट नहीं लिखा है, और फिर भी मेरे पास यह सब व्यवहार है जवाब स्पष्ट है। AngularJS DOM को संकलित करता है, क्योंकि AngularJS आपके HTML को कोड के रूप में इलाज कर रहा है। कई साधारण मामलों के लिए यह अक्सर एक टेम्पलेट लिखने के लिए पर्याप्त होता है और AngularJS को आपके लिए एक एप्लिकेशन में संकलित करने दें।

आपका टेम्पलेट आपके एप्लिकेशन को चलाता है यह एक डीएसएल के रूप में माना जाता है आप AngularJS घटकों को लिखते हैं, और AngularJS उन्हें खींचने और अपने टेम्पलेट की संरचना के आधार पर उन्हें सही समय पर उपलब्ध कराने का ध्यान रखेंगे। यह एक मानक MVC पैटर्न के लिए बहुत अलग है, जहां टेम्पलेट केवल आउटपुट के लिए है

यह उदाहरण के लिए रेल पर रूबी की तुलना में एक्सएसएलटी के समान है।

यह नियंत्रण का एक कट्टरपंथी उलटा है जो कुछ करने में प्रयुक्त होता है।

अपने आवेदन को अपने जावास्क्रिप्ट से ड्राइव करने की कोशिश करना बंद करो टेम्पलेट ड्राइव को आवेदन दें, और AngularJS को एक साथ घटकों के तारों का ख्याल रखना। यह भी कोणीय रास्ता है

सिमेंटिक एचटीएमएल बनाम सिमेंटिक मॉडल

JQuery के साथ आपके HTML पृष्ठ में शब्दार्थपूर्ण सार्थक सामग्री होनी चाहिए यदि जावास्क्रिप्ट बंद है (उपयोगकर्ता या खोज इंजन द्वारा) आपकी सामग्री पहुंच-योग्य बनी हुई है

क्योंकि AngularJS आपके HTML पृष्ठ को टेम्पलेट के रूप में मानता है टेम्पलेट शब्दार्थ नहीं माना जाता है क्योंकि आपकी सामग्री को आमतौर पर आपके मॉडल में संग्रहीत किया जाता है जो अंततः आपके एपीआई से आता है। कोणीय जेएस आपके डीओएम को एक सिमेंटिक वेब पेज बनाने के लिए मॉडल के साथ संकलित करता है।

आपका एचटीएमएल स्रोत अब सिमेंटिक नहीं है, इसके बजाए, आपके एपीआई और संकलित डीओएम सिमेंटिक हैं।

अंगुलर जेएस में, जिसका अर्थ है मॉडल में रहता है, एचटीएमएल केवल एक टेम्पलेट है, केवल प्रदर्शन के लिए

इस बिंदु पर आपके पास एसईओ और पहुंच के विषय में सभी प्रकार के प्रश्न हैं, और ठीक ही तो यहां खुले मुद्दे हैं अधिकांश स्क्रीन पाठक अब जावास्क्रिप्ट को पार्स करेंगे। खोज इंजन भी AJAXed सामग्री को इंगित कर सकते हैं फिर भी, आप यह सुनिश्चित करना चाहते हैं कि आप पुस्टेट यूआरएल का उपयोग कर रहे हैं और आपके पास एक सभ्य साइटमैप है। इस मुद्दे की चर्चा के लिए यहां देखें: https://stackoverflow.com/a/23245379/687677

चिंताओं का पृथक्करण (एसओसी) बनाम एमवीसी

चिंताओं का पृथक्करण (एसओसी) एक ऐसा पैटर्न है जो एसईओ, पहुंच और ब्राउज़र असंगतता सहित विभिन्न कारणों से कई वर्षों के वेब विकास पर बड़ा हुआ है। यह इस तरह दिख रहा है:

  1. एचटीएमएल – सिमेंटिक अर्थ। एचटीएमएल अकेले खड़ा होना चाहिए।
  2. सीएसएस – स्टाइल, सीएसएस के बिना पृष्ठ अभी भी पठनीय है।
  3. जावास्क्रिप्ट – व्यवहार, स्क्रिप्ट के बिना, सामग्री बनी हुई है।

दोबारा, AngularJS अपने नियमों द्वारा नहीं खेलता है एक स्ट्रोक में, एंजेलरजेएस प्राप्त ज्ञान के एक दशक से दूर रहता है और इसके बजाय एक MVC पैटर्न का उपयोग करता है जिसमें टेम्पलेट शब्दार्थिक नहीं है, यहां तक ​​कि थोड़ा भी नहीं।

यह इस तरह दिख रहा है:

  1. मॉडल – आपके मॉडल में आपके सिमेंटिक डेटा शामिल हैं मॉडल आमतौर पर JSON ऑब्जेक्ट होते हैं। मॉडल ऑब्जेक्ट के गुणों के रूप में मौजूद हैं, जिसे $ गुंजाइश कहते हैं। आप $ दायरे पर आसान उपयोग फ़ंक्शन भी संग्रहीत कर सकते हैं, जो आपके टेम्प्लेट तब तक पहुंच सकते हैं
  2. देखें – आपके विचार HTML में लिखे गए हैं दृश्य आमतौर पर शब्दार्थ नहीं है क्योंकि आपका डेटा मॉडल में रहता है।
  3. नियंत्रक – आपका नियंत्रक एक जावास्क्रिप्ट फ़ंक्शन है जो मॉडल को दृश्य को हुक कर देता है। इसका कार्य शुरू करने के लिए है $ दायरे आपके आवेदन के आधार पर, आपको नियंत्रक बनाने की आवश्यकता हो सकती है या नहीं। आपके पास एक पृष्ठ पर कई नियंत्रक हो सकते हैं।

एमवीसी और एसओसी समान पैमाने के विपरीत छोर पर नहीं हैं, वे पूरी तरह से अलग अक्ष पर हैं एसओसी एक कोणीय जे एस संदर्भ में कोई मतलब नहीं है आपको इसे भूलना होगा और आगे बढ़ना होगा।

अगर, मेरी तरह, आप ब्राउज़र युद्धों के माध्यम से रहते थे, तो आपको इस विचार को काफी आक्रामक लगता है। इसे खत्म करो, यह इसके लायक होगा, मैं वादा करता हूँ।

प्लगइन्स बनाम निर्देश

प्लगइन्स jQuery का विस्तार करते हैं AngularJS निर्देश आपके ब्राउज़र की क्षमताओं का विस्तार करते हैं।

JQuery में हम फ़ंक्शन को jQuery.prototype पर जोड़कर प्लगइन्स को परिभाषित करते हैं। इसके बाद हम तत्वों का चयन करके और परिणाम पर प्लगइन को कॉल करके डोम में इन्हें हुक कर देते हैं। यह विचार है कि jQuery की क्षमताओं का विस्तार करना है।

उदाहरण के लिए, यदि आप अपने पृष्ठ पर एक हिंडोला चाहते हैं, तो आप संभवतः एक एनएवी तत्व में लिपटे आंकड़ों की एक अनोर्ड सूची को परिभाषित कर सकते हैं। You might then write some jQuery to select the list on the page and restyle it as a gallery with timeouts to do the sliding animation.

In AngularJS, we define directives. A directive is a function which returns a JSON object. This object tells AngularJS what DOM elements to look for, and what changes to make to them. Directives are hooked in to the template using either attributes or elements, which you invent. The idea is to extend the capabilities of HTML with new attributes and elements.

The AngularJS way is to extend the capabilities of native looking HTML. You should write HTML that looks like HTML, extended with custom attributes and elements.

If you want a carousel, just use a <carousel /> element, then define a directive to pull in a template, and make that sucker work.

Lots of small directives vs. big plugins with configuration switches

The tendency with jQuery is to write great big plugins like lightbox which we then configure by passing in numerous values and options.

This is a mistake in AngularJS.

Take the example of a dropdown. When writing a dropdown plugin you might be tempted to code in click handlers, perhaps a function to add in a chevron which is either up or down, perhaps change the class of the unfolded element, show hide the menu, all helpful stuff.

Until you want to make a small change.

Say you have a menu that you want to unfold on hover. Well now we have a problem. Our plugin has wired in our click handler for us, we're going to need to add a configuration option to make it behave differently in this specific case.

In AngularJS we write smaller directives. Our dropdown directive would be ridiculously small. It might maintain the folded state, and provide methods to fold(), unfold() or toggle(). These methods would simply update $scope.menu.visible which is a boolean holding the state.

Now in our template we can wire this up:

 <a ng-click="toggle()">Menu</a> <ul ng-show="menu.visible"> ... </ul> 

Need to update on mouseover?

 <a ng-mouseenter="unfold()" ng-mouseleave="fold()">Menu</a> <ul ng-show="menu.visible"> ... </ul> 

The template drives the application so we get HTML level granularity. If we want to make case by case exceptions, the template makes this easy.

Closure vs. $scope

JQuery plugins are created in a closure. Privacy is maintained within that closure. It's up to you to maintain your scope chain within that closure. You only really have access to the set of DOM nodes passed in to the plugin by jQuery, plus any local variables defined in the closure and any globals you have defined. This means that plugins are quite self contained. This is a good thing, but can get restrictive when creating a whole application. Trying to pass data between sections of a dynamic page becomes a chore.

AngularJS has $scope objects. These are special objects created and maintained by AngularJS in which you store your model. Certain directives will spawn a new $scope, which by default inherits from its wrapping $scope using JavaScript prototypical inheritance. The $scope object is accessible in the controller and the view.

This is the clever part. Because the structure of $scope inheritance roughly follows the structure of the DOM, elements have access to their own scope, and any containing scopes seamlessly, all the way up to the global $scope (which is not the same as the global scope).

This makes it much easier to pass data around, and to store data at an appropriate level. If a dropdown is unfolded, only the dropdown $scope needs to know about it. If the user updates their preferences, you might want to update the global $scope, and any nested scopes listening to the user preferences would automatically be alerted.

This might sound complicated, in fact, once you relax into it, it's like flying. You don't need to create the $scope object, AngularJS instantiates and configures it for you, correctly and appropriately based on your template hierarchy. AngularJS then makes it available to your component using the magic of dependency injection (more on this later).

Manual DOM changes vs. Data Binding

In jQuery you make all your DOM changes by hand. You construct new DOM elements programatically. If you have a JSON array and you want to put it to the DOM, you must write a function to generate the HTML and insert it.

In AngularJS you can do this too, but you are encouraged to make use of data binding. Change your model, and because the DOM is bound to it via a template your DOM will automatically update, no intervention required.

Because data binding is done from the template, using either an attribute or the curly brace syntax, it's super easy to do. There's little cognitive overhead associated with it so you'll find yourself doing it all the time.

 <input ng-model="user.name" /> 

Binds the input element to $scope.user.name . Updating the input will update the value in your current scope, and vice-versa.

Likewise:

 <p> {{user.name}} </p> 

will output the user name in a paragraph. It's a live binding, so if the $scope.user.name value is updated, the template will update too.

Ajax all of the time

In jQuery making an Ajax call is fairly simple, but it's still something you might think twice about. There's the added complexity to think about, and a fair chunk of script to maintain.

In AngularJS, Ajax is your default go-to solution and it happens all the time, almost without you noticing. You can include templates with ng-include. You can apply a template with the simplest custom directive. You can wrap an Ajax call in a service and create yourself a GitHub service, or a Flickr service, which you can access with astonishing ease.

Service Objects vs Helper Functions

In jQuery, if we want to accomplish a small non-dom related task such as pulling a feed from an API, we might write a little function to do that in our closure. That's a valid solution, but what if we want to access that feed often? What if we want to reuse that code in another application?

AngularJS gives us service objects.

Services are simple objects that contain functions and data. They are always singletons, meaning there can never be more than one of them. Say we want to access the Stack Overflow API, we might write a StackOverflowService which defines methods for doing so.

Let's say we have a shopping cart. We might define a ShoppingCartService which maintains our cart and contains methods for adding and removing items. Because the service is a singleton, and is shared by all other components, any object that needs to can write to the shopping cart and pull data from it. It's always the same cart.

Service objects are self-contained AngularJS components which we can use and reuse as we see fit. They are simple JSON objects containing functions and Data. They are always singletons, so if you store data on a service in one place, you can get that data out somewhere else just by requesting the same service.

Dependency injection (DI) vs. Instatiation – aka de-spaghettification

AngularJS manages your dependencies for you. If you want an object, simply refer to it and AngularJS will get it for you.

Until you start to use this, it's hard to explain just what a massive time boon this is. Nothing like AngularJS DI exists inside jQuery.

DI means that instead of writing your application and wiring it together, you instead define a library of components, each identified by a string.

Say I have a component called 'FlickrService' which defines methods for pulling JSON feeds from Flickr. Now, if I want to write a controller that can access Flickr, I just need to refer to the 'FlickrService' by name when I declare the controller. AngularJS will take care of instantiating the component and making it available to my controller.

For example, here I define a service:

 myApp.service('FlickrService', function() { return { getFeed: function() { // do something here } } }); 

Now when I want to use that service I just refer to it by name like this:

 myApp.controller('myController', ['FlickrService', function(FlickrService) { FlickrService.getFeed() }]); 

AngularJS will recognise that a FlickrService object is needed to instantiate the controller, and will provide one for us.

This makes wiring things together very easy, and pretty much eliminates any tendency towards spagettification. We have a flat list of components, and AngularJS hands them to us one by one as and when we need them.

Modular service architecture

jQuery says very little about how you should organise your code. AngularJS has opinions.

AngularJS gives you modules into which you can place your code. If you're writing a script that talks to Flickr for example, you might want to create a Flickr module to wrap all your Flickr related functions in. Modules can include other modules (DI). Your main application is usually a module, and this should include all the other modules your application will depend on.

You get simple code reuse, if you want to write another application based on Flickr, you can just include the Flickr module and voila, you have access to all your Flickr related functions in your new application.

Modules contain AngularJS components. When we include a module, all the components in that module become available to us as a simple list identified by their unique strings . We can then inject those components into each other using AngularJS's dependency injection mechanism.

To sum up

AngularJS and jQuery are not enemies. It's possible to use jQuery within AngularJS very nicely. If you're using AngularJS well (templates, data-binding, $scope, directives, etc.) you will find you need a lot less jQuery than you might otherwise require.

The main thing to realise is that your template drives your application. Stop trying to write big plugins that do everything. Instead write little directives that do one thing, then write a simple template to wire them together.

Think less about unobtrusive JavaScript, and instead think in terms of HTML extensions.

My little book

I got so excited about AngularJS, I wrote a short book on it which you're very welcome to read online http://nicholasjohnson.com/angular-book/ . I hope it's helpful.

क्या आप प्रतिमान बदलाव का वर्णन कर सकते हैं जो आवश्यक है?

Imperative vs Declarative

With jQuery you tell the DOM what needs to happen, step by step. With AngularJS you describe what results you want but not how to do it. More on this here . Also, check out Mark Rajcok's answer.

How do I architect and design client-side web apps differently?

AngularJS is an entire client-side framework that uses the MVC pattern (check out their graphical representation ). It greatly focuses on separation of concerns.

सबसे बड़ा अंतर क्या है? मुझे क्या करना / प्रयोग करना बंद करना चाहिए; what should I start doing/using instead?

jQuery is a library

AngularJS is a beautiful client-side framework, highly testable, that combines tons of cool stuff such as MVC, dependency injection , data binding and much more.

It focuses on separation of concerns and testing ( unit testing and end-to-end testing), which facilitates test-driven development.

The best way to start is going through their awesome tutorial . You can go through the steps in a couple of hours; however, in case you want to master the concepts behind the scenes, they include a myriad of reference for further reading.

क्या कोई सर्वर-पक्ष विचार / प्रतिबंध हैं?

You may use it on existing applications where you are already using pure jQuery. However, if you want to fully take advantage of the AngularJS features you may consider coding the server side using a RESTful approach.

Doing so will allow you to leverage their resource factory , which creates an abstraction of your server side RESTful API and makes server-side calls (get, save, delete, etc.) incredibly easy.

To describe the "paradigm shift", I think a short answer can suffice.

AngularJS changes the way you find elements

In jQuery , you typically use selectors to find elements, and then wire them up:
$('#id .class').click(doStuff);

In AngularJS , you use directives to mark the elements directly, to wire them up:
<a ng-click="doStuff()">

AngularJS doesn't need (or want) you to find elements using selectors – the primary difference between AngularJS's jqLite versus full-blown jQuery is that jqLite does not support selectors .

So when people say "don't include jQuery at all", it's mainly because they don't want you to use selectors; they want you to learn to use directives instead. Direct, not select!

jQuery

jQuery makes ridiculously long JavaScript commands like getElementByHerpDerp shorter and cross-browser.

AngularJS

AngularJS allows you to make your own HTML tags/attributes that do things which work well with dynamic web applications (since HTML was designed for static pages).

Edit:

Saying "I have a jQuery background how do I think in AngularJS?" is like saying "I have an HTML background how do I think in JavaScript?" The fact that you're asking the question shows you most likely don't understand the fundamental purposes of these two resources. This is why I chose to answer the question by simply pointing out the fundamental difference rather than going through the list saying "AngularJS makes use of directives whereas jQuery uses CSS selectors to make a jQuery object which does this and that etc….". This question does not require a lengthy answer.

jQuery is a way to make programming JavaScript in the browser easier. Shorter, cross-browser commands, etc.

AngularJS extends HTML, so you don't have to put <div> all over the place just to make an application. It makes HTML actually work for applications rather than what it was designed for, which is static, educational web pages. It accomplishes this in a roundabout way using JavaScript, but fundamentally it is an extension of HTML, not JavaScript.

jQuery: you think a lot about 'QUERYing the DOM ' for DOM elements and doing something.

AngularJS: THE model is the truth, and you always think from that ANGLE.

For example, when you get data from THE server which you intend to display in some format in the DOM, in jQuery, you need to '1. FIND' where in the DOM you want to place this data, the '2. UPDATE/APPEND' it there by creating a new node or just setting its innerHTML . Then when you want to update this view, you then '3. FIND' the location and '4. UPDATE'. This cycle of find and update all done within the same context of getting and formatting data from server is gone in AngularJS.

With AngularJS you have your model (JavaScript objects you are already used to) and the value of the model tells you about the model (obviously) and about the view, and an operation on the model automatically propagates to the view, so you don't have to think about it. You will find yourself in AngularJS no longer finding things in the DOM.

To put in another way, in jQuery, you need to think about CSS selectors, that is, where is the div or td that has a class or attribute, etc., so that I can get their HTML or color or value, but in AngularJS, you will find yourself thinking like this: what model am I dealing with, I will set the model's value to true. You are not bothering yourself of whether the view reflecting this value is a checked box or resides in a td element (details you would have often needed to think about in jQuery).

And with DOM manipulation in AngularJS, you find yourself adding directives and filters, which you can think of as valid HTML extensions.

One more thing you will experience in AngularJS: in jQuery you call the jQuery functions a lot, in AngularJS, AngularJS will call your functions, so AngularJS will 'tell you how to do things', but the benefits are worth it, so learning AngularJS usually means learning what AngularJS wants or the way AngularJS requires that you present your functions and it will call it accordingly. This is one of the things that makes AngularJS a framework rather than a library.

jQuery is a DOM manipulation library.

AngularJS is an MV* framework.

In fact, AngularJS is one of the few JavaScript MV* frameworks (many JavaScript MVC tools still fall under the category library).

Being a framework, it hosts your code and takes ownership of decisions about what to call and when!

AngularJS itself includes a jQuery-lite edition within it. So for some basic DOM selection/manipulation, you really don't have to include the jQuery library (it saves many bytes to run on the network.)

AngularJS has the concept of "Directives" for DOM manipulation and designing reusable UI components, so you should use it whenever you feel the need of doing DOM manipulation related stuff (directives are only place where you should write jQuery code while using AngularJS).

AngularJS involves some learning curve (more than jQuery :-).

–>For any developer coming from jQuery background, my first advice would be to "learn JavaScript as a first class language before jumping onto a rich framework like AngularJS!" I learned the above fact the hard way.

सौभाग्य।

Those are some very nice, but lengthy answers.

To sum up my experiences:

  1. Controllers and providers (services, factories, etc.) are for modifying the data model, NOT HTML.
  2. HTML and directives define the layout and binding to the model.
  3. If you need to share data between controllers, create a service or factory – they are singletons that are shared across the application.
  4. If you need an HTML widget, create a directive.
  5. If you have some data and are now trying to update HTML… STOP! update the model, and make sure your HTML is bound to the model.

They're apples and oranges. You don't want to compare them. They're two different things. AngularJs has already jQuery lite built in which allows you to perform basic DOM manipulation without even including the full blown jQuery version.

jQuery is all about DOM manipulation. It solves all the cross browser pain otherwise you will have to deal with but it's not a framework that allows you to divide your app into components like AngularJS.

A nice thing about AngularJs is that it allows you to separate/isolate the DOM manipulation in the directives. There are built-in directives ready for you to use such as ng-click. You can create your own custom directives that will contain all your view logic or DOM manipulation so you don't end up mingle DOM manipulation code in the controllers or services that should take care of the business logic.

Angular breaks down your app into – Controllers – Services – Views – etc.

and there is one more thing, that's the directive. It's an attribute you can attach to any DOM element and you can go nuts with jQuery within it without worrying about your jQuery ever conflicts with AngularJs components or messes up with its architecture.

I heard from a meetup I attended, one of the founders of Angular said they worked really hard to separate out the DOM manipulation so do not try to include them back in.

Listen to the podcast JavaScript Jabber: Episode #32 that features the original creators of AngularJS: Misko Hevery & Igor Minar. They talk a lot about what it's like to come to AngularJS from other JavaScript backgrounds, especially jQuery.

One of the points made in the podcast made a lot of things click for me with respects to your question:

MISKO : […] one of the things we thought about very hardly in Angular is, how do we provide lots of escape hatches so that you can get out and basically figure out a way out of this. So to us, the answer is this thing called “Directives”. And with directives, you essentially become a regular little jQuery JavaScript, you can do whatever you want.

IGOR : So think of directive as the instruction to the compiler that tells it whenever you come across this certain element or this CSS in the template, and you keep this kind of code and that code is in charge of the element and everything below that element in the DOM tree.

A transcript of the entire episode is available at the link provided above.

So, to directly answer your question: AngularJS is -very- opinionated and is a true MV* framework. However, you can still do all of the really cool stuff you know and love with jQuery inside of directives. It's not a matter of "How do I do what I used to in jQuery?" as much as it's a matter of "How do I supplement AngularJS with all of the stuff I used to do in jQuery?"

It's really two very different states of mind.

I find this question interesting, because my first serious exposure to JavaScript programming was Node.js and AngularJS. I never learned jQuery, and I guess that's a good thing, because I don't have to unlearn anything. In fact, I actively avoid jQuery solutions to my problems, and instead, solely look for an "AngularJS way" to solve them. So, I guess my answer to this question would essentially boil down to, "think like someone who never learned jQuery" and avoid any temptation to incorporate jQuery directly (obviously AngularJS uses it to some extent behind the scenes).

AngularJS and jQuery:

AngularJs and JQuery are completely different at every level except the JQLite functionality and you will see it once you start learning the AngularJs core features (I explained it below).

AngularJs is a client side framework that offers to build the independent client side application. JQuery is a client side library that play around the DOM.

AngularJs Cool Principle – If you want some changes on your UI think from model data change perspective. Change your data and UI will re-render itself. You need not to play around DOM each time unless and until it is hardly required and that should also be handled through Angular Directives.

To answer this question, I want to share my experience on the first enterprise application with AngularJS. These are the most awesome features that Angular provide where we start changing our jQuery mindset and we get the Angular like a framework and not the library.

Two-way data binding is amazing: I had a grid with all functionality UPDATE, DELTE, INSERT. I have a data object that binds the grid's model using ng-repeat. You only need to write a single line of simple JavaScript code for delete and insert and that's it. grid automatically updates as the grid model changes instantly. Update functionality is real time, no code for it. You feel amazing!!!

Reusable directives are super: Write directives in one place and use it throughout the application. OMG!!! I used these directive for paging, regex, validations, etc. It is really cool!

Routing is strong: It's up to your implementation how you want to use it, but it requires very few lines of code to route the request to specify HTML and controller (JavaScript)

Controllers are great: Controllers take care of their own HTML, but this separation works well for common functionality well as. If you want to call the same function on the click of a button on master HTML, just write the same function name in each controller and write individual code.

Plugins: There are many other similar features like showing an overlay in your app. You don't need to write code for it, just use an overlay plugin available as wc-overlay, and this will automatically take care of all XMLHttpRequest (XHR) requests.

Ideal for RESTful architecture: Being a complete frameworks makes AngularJS great to work with a RESTful architecture. To call REST CRUD APIs is very easier and

Services : Write common codes using services and less code in controllers. Sevices can be used to share common functionalities among the controllers.

Extensibility : Angular has extended the HTML directives using angular directives. Write expressions inside html and evaluate them on runtime. Create your own directives and services and use them in another project without any extra effort.

As a JavaScript MV* beginner and purely focusing on the application architecture (not the server/client-side matters), I would certainly recommend the following resource (which I am surprised wasn't mentioned yet): JavaScript Design Patterns , by Addy Osmani, as an introduction to different JavaScript Design Patterns . The terms used in this answer are taken from the linked document above. I'm not going to repeat what was worded really well in the accepted answer. Instead, this answer links back to the theoretical backgrounds which power AngularJS (and other libraries).

Like me, you will quickly realize that AngularJS (or Ember.js , Durandal, & other MV* frameworks for that matter) is one complex framework assembling many of the different JavaScript design patterns.

I found it easier also, to test (1) native JavaScript code and (2) smaller libraries for each one of these patterns separately before diving into one global framework. This allowed me to better understand which crucial issues a framework adresses (because you are personally faced with the problem).

उदाहरण के लिए:

  • JavaScript Object-oriented Programming (this is a Google search link). It is not a library, but certainly a prerequisite to any application programming. It taught me the native implementations of the prototype, constructor, singleton & decorator patterns
  • jQuery / Underscore for the facade pattern (like WYSIWYG's for manipulating the DOM)
  • Prototype.js for the prototype/ constructor/ mixin pattern
  • RequireJS / Curl.js for the module pattern/ AMD
  • KnockoutJS for the observable, publish/subscribe pattern

NB: This list is not complete, nor 'the best libraries'; they just happen to be the libraries I used. These libraries also include more patterns, the ones mentioned are just their main focuses or original intents. If you feel something is missing from this list, please do mention it in the comments, and I will be glad to add it.

Actually, if you're using AngularJS, you don't need jQuery anymore. AngularJS itself has the binding and directive, which is a very good "replacement" for most things you can do with jQuery.

I usually develop mobile applications using AngularJS and Cordova . The ONLY thing from jQuery I needed is the Selector.

By googling, I see that there is a standalone jQuery selector module out there. It's Sizzle.

And I decided to make a tiny code snippet that help me quickly start a website using AngularJS with the power of jQuery Selector (using Sizzle).

I shared my code here: https://github.com/huytd/Sizzular