"अगर मैं एक jQuery पृष्ठभूमि है AngularJS में सोच"? [बन्द है]


4514

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

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

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


"ASP.NET MVC" या "RoR" से परिचित लोगों के लिए - बस कोणीय को "क्लाइंट-साइड MVC" के रूप में सोचें और इसे सही करें।
सर्ज Shultz

जवाबों:


7178

1. अपने पृष्ठ को डिज़ाइन न करें, और फिर इसे DOM जोड़तोड़ के साथ बदलें

JQuery में, आप एक पृष्ठ डिज़ाइन करते हैं, और फिर आप इसे गतिशील बनाते हैं। ऐसा इसलिए है क्योंकि jQuery को वृद्धि के लिए डिज़ाइन किया गया था और यह उस सरल आधार से अविश्वसनीय रूप से बढ़ गया है।

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

2. AngularJS के साथ jQuery वृद्धि मत करो

इसी तरह, इस विचार के साथ शुरू न करें कि jQuery X, Y और Z करता है, इसलिए मैं सिर्फ मॉडल और नियंत्रकों के लिए उस पर AngularJS जोड़ूंगा। यह वास्तव में आकर्षक है जब आप अभी शुरू कर रहे हैं, यही कारण है कि मैं हमेशा सलाह देता हूं कि नए AngularJS डेवलपर्स jQuery का उपयोग बिल्कुल भी न करें, कम से कम जब तक उन्हें "कोणीय मार्ग" करने की आदत न हो।

मैंने कई डेवलपर्स को यहां देखा है और मेलिंग सूची पर 150 या 200 लाइनों के कोड के jQuery प्लग इन के साथ ये विस्तृत समाधान बनाते हैं कि वे फिर कॉलबैक और $applys के एक संग्रह के साथ AngularJS में गोंद करते हैं जो भ्रमित और जटिल होते हैं; लेकिन वे अंततः इसे काम कर रहे हैं! समस्या यह है कि ज्यादातर मामलों में कोड के एक हिस्से में jQuery प्लगइन को AngularJS में फिर से लिखा जा सकता है, जहां अचानक सब कुछ समझ में आता है।

लब्बोलुआब यह है: समाधान करते समय, पहले "एंगुलरजेएस में सोचो"; यदि आप एक समाधान के बारे में नहीं सोच सकते हैं, तो समुदाय से पूछें; अगर उस सब के बाद भी कोई आसान उपाय नहीं है, तो बेझिझक jQuery के लिए पहुँचें। लेकिन jQuery को बैसाखी न बनने दें या आप कभी भी AngularJS में महारत हासिल नहीं करेंगे।

3. वास्तुकला के संदर्भ में हमेशा सोचें

सबसे पहले पता है कि एकल पृष्ठ अनुप्रयोगों हैं अनुप्रयोगों । वे वेबपेज नहीं हैं इसलिए हमें क्लाइंट-साइड डेवलपर की तरह सोचने के अलावा सर्वर-साइड डेवलपर की तरह सोचने की जरूरत है । हमें अपने आवेदन को व्यक्तिगत, एक्स्टेंसिबल, टेस्ट करने योग्य घटकों में विभाजित करने के तरीके के बारे में सोचना होगा।

तो फिर आप कैसे करते हैं? आप "AngularJS में कैसे सोचते हैं"? यहाँ कुछ सामान्य सिद्धांत हैं, जो jQuery के साथ विपरीत हैं।

दृश्य "आधिकारिक रिकॉर्ड" है

JQuery में, हम प्रोग्राम को दृश्य बदलते हैं। हम एक ड्रॉपडाउन मेनू को इस प्रकार परिभाषित कर सकते हैं ul:

<ul class="main-menu">
    <li class="active">
        <a href="#/home">Home</a>
    </li>
    <li>
        <a href="#/menu1">Menu 1</a>
        <ul>
            <li><a href="#/sm1">Submenu 1</a></li>
            <li><a href="#/sm2">Submenu 2</a></li>
            <li><a href="#/sm3">Submenu 3</a></li>
        </ul>
    </li>
    <li>
        <a href="#/home">Menu 2</a>
    </li>
</ul>

हमारे आवेदन तर्क में jQuery में, हम इसे कुछ इस तरह से सक्रिय करेंगे:

$('.main-menu').dropdownMenu();

जब हम केवल दृश्य देखते हैं, तो यह तुरंत स्पष्ट नहीं होता है कि यहां कोई कार्यक्षमता है। छोटे अनुप्रयोगों के लिए, यह ठीक है। लेकिन गैर-तुच्छ अनुप्रयोगों के लिए, चीजें जल्दी से भ्रमित हो जाती हैं और बनाए रखने में मुश्किल होती हैं।

AngularJS में, हालांकि, दृश्य-आधारित कार्यक्षमता का आधिकारिक रिकॉर्ड है। हमारी ulघोषणा इसके बजाय इस तरह दिखाई देगी:

<ul class="main-menu" dropdown-menu>
    ...
</ul>

ये दोनों एक ही काम करते हैं, लेकिन AngularJS संस्करण में कोई भी टेम्पलेट को देखकर जानता है कि क्या होने वाला है। जब भी विकास टीम का कोई नया सदस्य बोर्ड पर आता है, तो वह इस पर गौर कर सकती है और फिर जान सकती है कि इस पर एक निर्देश कहा जाता है, dropdownMenuजो इसे संचालित करता है; उसे किसी भी कोड के माध्यम से सही उत्तर या झारना करने की आवश्यकता नहीं है। दृश्य ने हमें बताया कि क्या होना चाहिए था। बहुत सफाई वाला।

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

याद रखें: डिज़ाइन न करें, और फिर चिह्नित करें। आपको आर्किटेक्ट होना चाहिए, और फिर डिज़ाइन करना चाहिए।

अनिवार्य तथ्य

यह अब तक AngularJS की सबसे भयानक विशेषताओं में से एक है और पिछले अनुभाग में मेरे द्वारा बताए गए DOM जोड़तोड़ के प्रकारों को करने की बहुत अधिक कटौती करता है। AngularJS स्वचालित रूप से आपके विचार को अपडेट कर देगा ताकि आपको न करना पड़े! JQuery में, हम घटनाओं पर प्रतिक्रिया करते हैं और फिर सामग्री को अपडेट करते हैं। कुछ इस तरह:

$.ajax({
  url: '/myEndpoint.json',
  success: function ( data, status ) {
    $('ul#log').append('<li>Data Received!</li>');
  }
});

इस तरह दिखता है एक दृश्य के लिए:

<ul class="messages" id="log">
</ul>

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

यह थोड़ा गड़बड़ है और एक तिपहिया रेलिंग है। लेकिन AngularJS में, हम यह कर सकते हैं:

$http( '/myEndpoint.json' ).then( function ( response ) {
    $scope.log.push( { msg: 'Data Received!' } );
});

और हमारा विचार इस तरह दिख सकता है:

<ul class="messages">
    <li ng-repeat="entry in log">{{ entry.msg }}</li>
</ul>

लेकिन उस मामले के लिए, हमारा विचार इस तरह दिख सकता है:

<div class="messages">
    <div class="alert" ng-repeat="entry in log">
        {{ entry.msg }}
    </div>
</div>

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

हालाँकि मैंने इसे यहाँ नहीं दिखाया है, डेटा बाइंडिंग दो-तरफ़ा है। तो उन लॉग संदेश भी सिर्फ यह कर के दृश्य में संपादन योग्य हो सकता है <input ng-model="entry.msg" />:। और वहां बहुत ख़ुशी थी।

विकृत मॉडल परत

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

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

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

निर्भरता अन्तःक्षेपण

चिंताओं को अलग करने में हमारी सहायता करने के लिए निर्भरता इंजेक्शन (DI) है। यदि आप सर्वर-साइड भाषा ( जावा से PHP तक ) से आते हैं, तो शायद आप पहले से ही इस अवधारणा से परिचित हैं, लेकिन यदि आप एक ग्राहक-पक्ष के व्यक्ति हैं, जो jQuery से आ रहे हैं, तो यह अवधारणा मूर्खतापूर्ण से लेकर हिप्स्टर तक कुछ भी प्रतीत हो सकती है । लेकिन ऐसा नहीं है। :-)

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

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

परीक्षण की बात ...

4. परीक्षण-संचालित विकास - हमेशा

यह वास्तव में वास्तुकला पर धारा 3 का हिस्सा है, लेकिन यह इतना महत्वपूर्ण है कि मैं इसे अपने स्वयं के शीर्ष-स्तरीय खंड के रूप में डाल रहा हूं।

आपके द्वारा देखे गए, उपयोग किए गए या लिखे गए कई jQuery प्लगइन्स में से, उनमें से कितने में एक साथ टेस्ट सूट था? बहुत अधिक नहीं है क्योंकि jQuery उस के लिए बहुत अनुकूल नहीं है। लेकिन AngularJS है।

JQuery में, परीक्षण का एकमात्र तरीका अक्सर नमूना / डेमो पृष्ठ के साथ स्वतंत्र रूप से घटक बनाना है जिसके खिलाफ हमारे परीक्षण डोम हेरफेर कर सकते हैं। तो फिर हमें एक घटक को अलग से विकसित करना होगा और फिर इसे अपने आवेदन में एकीकृत करना होगा। कितनी असुविधाजनक! इतना समय, जब jQuery के साथ विकसित हो रहा है, हम परीक्षण-संचालित विकास के बजाय पुनरावृत्ति का विकल्प चुनते हैं। और हमें कौन दोषी ठहरा सकता है?

लेकिन क्योंकि हमारे पास चिंताओं का पृथक्करण है, इसलिए हम परीक्षण-संचालित विकास को AngularJS में पुनरावृत्त कर सकते हैं! उदाहरण के लिए, मान लें कि हम अपने मेनू में इंगित करने के लिए एक सुपर-सरल निर्देश चाहते हैं कि हमारा वर्तमान मार्ग क्या है। हम घोषणा कर सकते हैं कि हम अपने आवेदन के दृश्य में क्या चाहते हैं:

<a href="/hello" when-active>Hello</a>

ठीक है, अब हम गैर-मौजूद when-activeनिर्देश के लिए एक परीक्षण लिख सकते हैं :

it( 'should add "active" when the route changes', inject(function() {
    var elm = $compile( '<a href="https://stackoverflow.com/hello" when-active>Hello</a>' )( $scope );

    $location.path('/not-matching');
    expect( elm.hasClass('active') ).toBeFalsey();

    $location.path( '/hello' );
    expect( elm.hasClass('active') ).toBeTruthy();
}));

और जब हम अपना परीक्षण चलाते हैं, तो हम पुष्टि कर सकते हैं कि यह विफल है। केवल अब हमें अपना निर्देश बनाना चाहिए:

.directive( 'whenActive', function ( $location ) {
    return {
        scope: true,
        link: function ( scope, element, attrs ) {
            scope.$on( '$routeChangeSuccess', function () {
                if ( $location.path() == element.attr( 'href' ) ) {
                    element.addClass( 'active' );
                }
                else {
                    element.removeClass( 'active' );
                }
            });
        }
    };
});

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

5. वैचारिक रूप से, निर्देश jQuery पैक नहीं कर रहे हैं

आपने अक्सर सुना होगा "केवल एक निर्देश में डोम हेरफेर करें"। यह एक आवश्यकता है। उचित व्यवहार से इसका इलाज करें!

लेकिन चलो थोड़ा गहरा गोता लगाओ ...

कुछ निर्देश केवल वही देखते हैं जो पहले से ही दृश्य में है (सोचते हैं ngClass) और इसलिए कभी-कभी डोम हेरफेर सीधे करते हैं और फिर मूल रूप से किए जाते हैं। लेकिन अगर एक निर्देश एक "विजेट" की तरह है और एक टेम्पलेट है, तो उसे चिंताओं को अलग करने का भी सम्मान करना चाहिए । यही है, टेम्पलेट को भी लिंक और नियंत्रक कार्यों में इसके कार्यान्वयन से काफी हद तक स्वतंत्र रहना चाहिए।

AngularJS इसे बहुत आसान बनाने के लिए उपकरणों के एक पूरे सेट के साथ आता है; साथ ngClassहम गतिशील वर्ग अद्यतन कर सकते हैं; ngModelदो-तरफ़ा डेटा बाइंडिंग की अनुमति देता है; ngShowऔर ngHideप्रोग्राम को किसी तत्व को दिखाना या छिपाना; और भी बहुत कुछ - जिनको हम स्वयं लिखते हैं। दूसरे शब्दों में, हम डोम हेरफेर के बिना सभी प्रकार की अशुद्धि कर सकते हैं । कम डोम हेरफेर, परीक्षण करने के लिए आसान निर्देश हैं, वे शैली के लिए आसान हैं, भविष्य में उन्हें बदलने के लिए जितना आसान है, और वे अधिक पुन: प्रयोज्य और वितरण योग्य हैं।

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

लकड़हारे के बारे में सोचें जिसे हमने खंड 3 में क्रमादेशित किया है। यहां तक ​​कि अगर हम इसे एक निर्देश में रखते हैं, तो भी हम इसे "एंग्री वे" करना चाहते हैं। यह अभी भी कोई डोम हेरफेर नहीं करता है! डोम हेरफेर आवश्यक होने पर कई बार होता है, लेकिन यह आपके विचार से बहुत दुर्लभ है! अपने आवेदन में कहीं भी डोम हेरफेर करने से पहले , अपने आप से पूछें कि क्या आपको वास्तव में आवश्यकता है। एक बेहतर तरीका हो सकता है।

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

.directive( 'myDirective', function () {
    return {
        template: '<a class="btn">Toggle me!</a>',
        link: function ( scope, element, attrs ) {
            var on = false;

            $(element).click( function () {
                on = !on;
                $(element).toggleClass('active', on);
            });
        }
    };
});

इसमें कुछ चीजें गलत हैं:

  1. सबसे पहले, jQuery आवश्यक नहीं था। वहाँ कुछ भी नहीं है हम यहाँ है कि सभी jQuery की जरूरत है!
  2. दूसरा, यहां तक ​​कि अगर हमारे पास पहले से ही हमारे पेज पर jQuery है, तो इसका उपयोग करने का कोई कारण नहीं है; हम बस का उपयोग कर सकते हैं angular.elementऔर हमारा घटक तब भी काम करेगा जब jQuery नहीं है।
  3. तीसरा, यहां तक ​​कि संभालने के लिए इस निर्देश के लिए jQuery की आवश्यकता थी , jqLite ( angular.element) हमेशा लोड होने पर jQuery का उपयोग करेगा ! इसलिए हमें उपयोग करने की आवश्यकता नहीं है $- हम सिर्फ उपयोग कर सकते हैं angular.element
  4. चौथा, तीसरे से निकटता से जुड़ा हुआ है, यह है कि jqLite तत्वों को इसमें लपेटने की आवश्यकता नहीं है $- जो elementकि linkफ़ंक्शन को पास किया गया है वह पहले से ही jQuery तत्व होगा!
  5. और पांचवां, जिसका हमने पिछले खंडों में उल्लेख किया है, हम अपने तर्क में टेम्प्लेट सामान क्यों मिला रहे हैं?

इस निर्देश को फिर से लिखा जा सकता है (यहां तक ​​कि बहुत जटिल मामलों के लिए भी!) बस इतना पसंद है:

.directive( 'myDirective', function () {
    return {
        scope: true,
        template: '<a class="btn" ng-class="{active: on}" ng-click="toggle()">Toggle me!</a>',
        link: function ( scope, element, attrs ) {
            scope.on = false;

            scope.toggle = function () {
                scope.on = !scope.on;
            };
        }
    };
});

फिर से, टेम्प्लेट का सामान टेम्प्लेट में होता है, इसलिए आप (या आपके उपयोगकर्ता) इसे आसानी से उस एक के लिए स्वैप कर सकते हैं जो किसी भी शैली को पूरा करता है, और तर्क को कभी भी छूना नहीं पड़ता था। पुनर्जीवन - उछाल!

और अभी भी उन सभी अन्य लाभ हैं, जैसे परीक्षण - यह आसान है! कोई फर्क नहीं पड़ता कि टेम्पलेट में क्या है, निर्देश के आंतरिक एपीआई को कभी नहीं छुआ जाता है, इसलिए रिफैक्टिंग करना आसान है। आप निर्देश को छूने के बिना जितना चाहें उतना टेम्पलेट बदल सकते हैं। और कोई फर्क नहीं पड़ता कि आप क्या बदलते हैं, आपके परीक्षण अभी भी गुजरते हैं।

w00t!

तो अगर निर्देश सिर्फ jQuery जैसे कार्यों का संग्रह नहीं हैं, तो वे क्या हैं? निर्देश वास्तव में HTML के एक्सटेंशन हैं । यदि HTML कुछ ऐसा नहीं करता है जिसे आपको करने की आवश्यकता है, तो आप इसे आपके लिए करने के लिए एक निर्देश लिखते हैं, और फिर इसे वैसे ही उपयोग करते हैं जैसे कि यह HTML का हिस्सा था।

, दूसरे शब्दों में AngularJS बॉक्स से बाहर कुछ करना नहीं है, तो लगता है कि कैसे टीम इसे पूरा अधिकार के साथ में फिट करने के लिए हैं ngClick, ngClass, एट अल।

सारांश

JQuery का भी उपयोग न करें। इसे भी शामिल न करें। यह आपको वापस पकड़ लेगा। और जब आपको कोई समस्या आती है, तो आपको लगता है कि आप जानते हैं कि jQuery में पहले से ही हल कैसे करना है, इससे पहले कि आप पहुंचें, यह $सोचने की कोशिश करें कि इसे AngularJS में कैसे करना है। यदि आप नहीं जानते, पूछें! 20 में से 19 बार, इसे करने का सबसे अच्छा तरीका jQuery की आवश्यकता नहीं है और आपके लिए और अधिक काम में jQuery के परिणामों के साथ इसे हल करने का प्रयास करना है।


204
मुझे लगता है कि एक कोणीय ऐप के भीतर JQuery के साथ काम करना शामिल है जो कि सभी मौजूदा JQuery प्लग इन के कारण महत्वपूर्ण उपयोग-मामला है। मैं शुद्ध एंगुलर ऐप रखने के लिए jQuery में फैंसीबॉक्स को दोबारा नहीं लिख रहा हूं।
21

119
@taudep मुझे नहीं लगता कि आप जितना सोचते हैं, उससे हम असहमत हैं। अधिकांश jQuery प्लगइन्स को AngularJS में सस्ते में फिर से लिखा जा सकता है, और उन मामलों में हमें ऐसा करना चाहिए। कुछ जटिल के लिए जिसके लिए कोई समतुल्य नहीं है, तो उसके लिए जाएं। धारा 2 से उद्धृत करने के लिए: 'निचला रेखा यह है: समाधान करते समय, पहले "एंगुलरजेएस में सोचें"; यदि आप एक समाधान के बारे में नहीं सोच सकते हैं, तो समुदाय से पूछें; अगर उस सब के बाद भी कोई आसान उपाय नहीं है, तो बेझिझक jQuery के लिए पहुँचें । लेकिन jQuery को बैसाखी न बनने दें या आप कभी भी AngularJS में महारत हासिल नहीं करेंगे। ' [जोर दिया गया]
जोश डेविड मिलर

67
एक चीनी इस महान जवाब के लिए अनुवाद, आशा है कि मददगार। hanzheng.github.io/tech/angularjs/2013/10/28/…
हान झेंग

18
@ बेनो ने "नो डोम मैनिपुलेशन" का क्या मतलब है कि निर्देश में आपका कोड सीधे डोम हेरफेर नहीं कर रहा है। यह कोड DOM के बारे में कुछ नहीं जानता है, यह सिर्फ आपके मॉडल में js वेरिएबल को संशोधित कर रहा है। हां, अंतिम परिणाम यह है कि DOM संशोधित हो जाता है, लेकिन ऐसा इसलिए है क्योंकि हम जो कोड लिखते हैं, उसके बाहर ऐसे बाइंडिंग होते हैं, जो हमारे वैरिएबल को बदलने पर प्रतिक्रिया करते हैं, लेकिन निर्देश के अंदर हम इसके बारे में कुछ नहीं जानते हैं, जिससे DOM हेरफेर के बीच एक साफ जुदाई बन जाती है और व्यापार का तर्क। अपने jQuery के उदाहरण में आप सीधे "इस तत्व को इस पाठ को
जोड़ो

11
@trusktr यदि कोई विकास कभी भी एक AngularJS एप्लिकेशन में jQuery का उपयोग करके इनपुट तत्व का मान सेट करता है, तो वह एक गंभीर त्रुटि कर रहा है। एकमात्र ऐसा अपवाद है जिसके बारे में मैं सोच सकता हूं कि एक मौजूदा jQuery प्लगइन है जो कि इनपुट को स्वचालित रूप से बदलने वाले पोर्ट को मुश्किल करता है, इस स्थिति में कॉलबैक में हुक लगाना या घड़ी सेट करना वैसे भी आवेदन के साथ इनलाइन को लाने के लिए बिल्कुल आवश्यक है।
जोश डेविड मिलर

407

इम्पीरेटिव → घोषणात्मक

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

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

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

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

jQuery विनीत जावास्क्रिप्ट को नियोजित करता है - व्यवहार (जावास्क्रिप्ट) को संरचना (HTML) से अलग किया जाता है।

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

Https://stackoverflow.com/a/14346528/215945 भी देखें

आवेदन डिजाइन

एक AngularJS आवेदन डिजाइन करने के लिए एक दृष्टिकोण:

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

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

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


1
क्या आप pls कर सकते हैं। यह समझाइए कि कैसे एक डोम तत्व एक दृष्टिकोण से अलग है?
राजकमल सुब्रमण्यन

22
@rajkamal, एक DOM तत्व है (जाहिर है) एक एकल तत्व है, और jQuery में अक्सर यही होता है कि हम क्या चयन / लक्ष्य / हेरफेर करते हैं। एक कोणीय दृश्य संबंधित DOM तत्वों का एक संग्रह / टेम्पलेट है: मेनू दृश्य, शीर्ष लेख दृश्य, पाद दृश्य, दाईं-साइडबार दृश्य, प्रोफ़ाइल दृश्य, हो सकता है कि कई मुख्य सामग्री दृश्य (एनजी-व्यू के माध्यम से switchable)। मूल रूप से, आप अपने पृष्ठ को विभिन्न दृश्यों में तोड़ना चाहते हैं। प्रत्येक दृश्य का अपना संबद्ध नियंत्रक होता है। प्रत्येक दृश्य आपके मॉडल का हिस्सा है।
मार्क राजकॉक

3
jQuery अनिवार्य नहीं है। onऔर whenएक jQuery संग्रह ऑब्जेक्ट के सदस्यों पर काम कर रहे उच्च-क्रम-कार्य हैं।
जैक वियर्स

18
तो किस तरह के कोड को कॉलबैक के लिए निष्पादित किया जाता है on? अनिवार्य।
cwharris

5
यह अनिवार्य बनाम घोषणात्मक वास्तव में केवल अमूर्तता का सवाल है। अंत में, सभी घोषणात्मक कोड (क्या करना है) अनिवार्य रूप से ढाँचा या एक कंपाइलर / दुभाषिया द्वारा एक निचले अमूर्त स्तर पर एक उप-रेखा में डेवलपर द्वारा लागू किया जाता है। यह कहना कि सामान्य रूप से "jQuery अत्यावश्यक है" काफी विचित्र कथन है, विशेष रूप से यह देखते हुए कि यह वास्तव में "मैनुअल" DOM-मैनिपुलेशन के संबंध में बहुत अधिक घोषणात्मक API प्रदान करता है।
एलेक्स

184

AngularJS बनाम jQuery

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

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

बड़ा अंतर (TLDR)

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

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

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

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

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

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

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

चलिए नीचे उतरते हैं नाटी की किरकिरी पर।

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

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

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

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

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

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

जावास्क्रिप्ट नियंत्रण में है। HTML का पूर्ण स्वतंत्र अस्तित्व है। आपका HTML जावास्क्रिप्ट के बिना भी अर्थ रहता है। Onclick विशेषताएँ बहुत बुरा अभ्यास हैं।

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

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

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

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

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

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

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

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

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

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

सिमेंटिक HTML बनाम सिमेंटिक मॉडल

JQuery के साथ आपके HTML पेज में अर्थपूर्ण सामग्री होनी चाहिए। यदि जावास्क्रिप्ट बंद है (एक उपयोगकर्ता या खोज इंजन द्वारा) आपकी सामग्री सुलभ है।

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

आपका HTML स्रोत अब शब्दार्थ नहीं है, इसके बजाय, आपका API और संकलित DOM शब्दार्थ है।

AngularJS में, अर्थ मॉडल में रहता है, HTML केवल प्रदर्शन के लिए एक टेम्पलेट है।

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

चिंताओं का अलगकरण (एसओसी) बनाम एमवीसी

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

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

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

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

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

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

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

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

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

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

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

AngularJS में, हम निर्देशों को परिभाषित करते हैं। एक निर्देश एक फ़ंक्शन है जो JSON ऑब्जेक्ट देता है। यह ऑब्जेक्ट AngularJS को बताता है कि DOM तत्वों को क्या देखना है, और उनके लिए क्या परिवर्तन करना है। निर्देशों को टेम्प्लेट या तत्वों का उपयोग करके टेम्पलेट पर हुक किया जाता है, जिसे आप आविष्कार करते हैं। विचार नई विशेषताओं और तत्वों के साथ HTML की क्षमताओं का विस्तार करना है।

AngularJS तरीका देशी दिखने वाले HTML की क्षमताओं का विस्तार करना है। आपको HTML लिखना चाहिए जो HTML की तरह दिखता है, जो कस्टम विशेषताओं और तत्वों के साथ विस्तारित है।

यदि आप एक हिंडोला चाहते हैं <carousel />, तो बस एक तत्व का उपयोग करें , फिर एक टेम्पलेट में खींचने के लिए एक निर्देश निर्धारित करें, और उस चूसने वाला काम करें।

विन्यास स्विच के साथ छोटे निर्देशों बनाम बड़े प्लगइन्स

JQuery की प्रवृत्ति लाइटबॉक्स जैसे महान बड़े प्लगइन्स को लिखना है जिसे हम कई मूल्यों और विकल्पों में पास करके कॉन्फ़िगर करते हैं।

यह AngularJS में एक गलती है।

एक ड्रॉपडाउन का उदाहरण लें। ड्रॉपडाउन प्लगिन लिखते समय आपको क्लिक हैंडलर में कोड करने का प्रलोभन दिया जा सकता है, संभवत: शेव्रोन में जोड़ने के लिए एक फंक्शन जो या तो ऊपर या नीचे होता है, शायद अनफोल्डेड एलिमेंट की क्लास को बदलते हैं, मेन्यू को छिपाते हैं, सभी मददगार चीजें दिखाते हैं।

जब तक आप एक छोटा सा बदलाव करना चाहते हैं।

मान लें कि आपके पास एक मेनू है जिसे आप होवर पर प्रकट करना चाहते हैं। खैर अब हमें एक समस्या है। हमारे प्लगइन ने हमारे लिए हमारे क्लिक हैंडलर में वायर्ड किया है, हमें इस विशिष्ट मामले में अलग तरह से व्यवहार करने के लिए कॉन्फ़िगरेशन विकल्प जोड़ने की आवश्यकता है।

AngularJS में हम छोटे निर्देश लिखते हैं। हमारा ड्रॉपडाउन निर्देश हास्यास्पद रूप से छोटा होगा। यह तह स्थिति को बनाए रख सकता है, और तह (), अनफोल्ड () या टॉगल () को तरीके प्रदान करता है। ये विधियाँ बस $ गुंजाइश को अपडेट करेंगी। menu.v अदृश्य जो एक बूलियन राज्य है।

अब हमारे टेम्प्लेट में हम इसे वायर कर सकते हैं:

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

माउसओवर पर अपडेट करने की आवश्यकता है?

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

टेम्पलेट एप्लिकेशन को चलाती है जिससे हमें HTML स्तर की ग्रैन्युलैरिटी मिलती है। यदि हम केस अपवादों द्वारा केस बनाना चाहते हैं, तो टेम्प्लेट यह आसान बनाता है।

बंद बनाम $ गुंजाइश

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

AngularJS में $ स्कोप ऑब्जेक्ट्स हैं। ये एंगुलरजेएस द्वारा बनाए गए और बनाए गए विशेष ऑब्जेक्ट हैं जिसमें आप अपने मॉडल को स्टोर करते हैं। कुछ निर्देश एक नया $ स्कोप बिताएंगे, जो डिफ़ॉल्ट रूप से जावास्क्रिप्ट प्रोटॉपिकल इनहेरिटेंस का उपयोग करके अपने रैपिंग $ स्कोप से विरासत में मिला है। $ गुंजाइश ऑब्जेक्ट नियंत्रक और दृश्य में सुलभ है।

यह चतुर हिस्सा है। क्योंकि $ स्कोप इनहेरिटेंस की संरचना लगभग डोम की संरचना का अनुसरण करती है, तत्वों की अपने दायरे तक पहुंच होती है, और किसी भी स्कोप को मूल रूप से, वैश्विक $ स्कोप तक (जो वैश्विक स्कोप के समान नहीं है)।

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

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

मैन्युअल DOM डेटा बाइंडिंग बनाम बदलता है

JQuery में आप अपने सभी DOM परिवर्तन हाथ से करते हैं। आप प्रोग्रामिक रूप से नए DOM तत्वों का निर्माण करते हैं। यदि आपके पास JSON सरणी है और आप इसे DOM पर रखना चाहते हैं, तो आपको HTML बनाने और उसे सम्मिलित करने के लिए एक फ़ंक्शन लिखना होगा।

AngularJS में आप ऐसा कर सकते हैं, लेकिन आपको डेटा बाइंडिंग का उपयोग करने के लिए प्रोत्साहित किया जाता है। अपना मॉडल बदलें, और क्योंकि DOM इसके लिए बाध्य है एक टेम्पलेट के माध्यम से आपका DOM अपने आप अपडेट हो जाएगा, कोई हस्तक्षेप की आवश्यकता नहीं है।

क्योंकि डेटा बाध्यकारी टेम्प्लेट से किया जाता है, या तो एक विशेषता या घुंघराले ब्रेस सिंटैक्स का उपयोग करके, यह करना आसान है। वहाँ थोड़ा संज्ञानात्मक उपरि इसके साथ जुड़ा हुआ है ताकि आप अपने आप को हर समय ऐसा करते हुए पाएंगे।

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

के लिए इनपुट तत्व को बांधता है $scope.user.name। इनपुट अपडेट करने से आपके वर्तमान दायरे में मूल्य अपडेट होगा, और इसके विपरीत।

इसी तरह:

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

पैराग्राफ में उपयोगकर्ता नाम का उत्पादन करेगा। यह एक लाइव बाइंडिंग है, इसलिए यदि $scope.user.nameमान अपडेट किया गया है, तो टेम्पलेट भी अपडेट होगा।

हर समय अजाक्स

JQuery में अजाक्स कॉल करना काफी सरल है, लेकिन यह अभी भी कुछ ऐसा है जिसके बारे में आप दो बार सोच सकते हैं। वहाँ जोड़ा जटिलता के बारे में सोचने के लिए है, और स्क्रिप्ट का एक अच्छा हिस्सा बनाए रखने के लिए।

एंगुलरजेएस में, अजाक्स आपका डिफ़ॉल्ट गो-टू समाधान है और यह हर समय होता है, लगभग आपके बिना। आप एनजी-शामिल के साथ टेम्पलेट शामिल कर सकते हैं। आप सबसे सरल कस्टम निर्देश के साथ एक टेम्पलेट लागू कर सकते हैं। आप एक सेवा में एक अजाक्स कॉल को लपेट सकते हैं और अपने आप को एक GitHub सेवा, या एक फ़्लिकर सेवा बना सकते हैं, जिसे आप आश्चर्यजनक आसानी से एक्सेस कर सकते हैं।

सेवा ऑब्जेक्ट बनाम हेल्पर फ़ंक्शंस

JQuery में, यदि हम एक छोटे गैर-डोम संबंधित कार्य को पूरा करना चाहते हैं, जैसे कि एपीआई से फीड खींचना, तो हम अपने क्लोजर में ऐसा करने के लिए एक छोटा सा कार्य लिख सकते हैं। यह एक वैध समाधान है, लेकिन क्या होगा यदि हम उस फ़ीड को अक्सर एक्सेस करना चाहते हैं? क्या होगा यदि हम उस कोड का किसी अन्य अनुप्रयोग में पुन: उपयोग करना चाहते हैं?

AngularJS हमें सर्विस ऑब्जेक्ट देता है।

सेवाएँ सरल वस्तुएँ हैं जिनमें फ़ंक्शंस और डेटा होते हैं। वे हमेशा सिंगल होते हैं, मतलब उनमें से एक से अधिक कभी नहीं हो सकता है। कहते हैं कि हम स्टैक ओवरफ्लो एपीआई का उपयोग करना चाहते हैं, हम StackOverflowServiceऐसा करने के लिए एक परिभाषित विधि लिख सकते हैं।

मान लीजिए कि हमारे पास शॉपिंग कार्ट है। हम एक ShoppingCartService को परिभाषित कर सकते हैं जो हमारी कार्ट को बनाए रखता है और इसमें आइटम जोड़ने और हटाने के तरीके शामिल हैं। क्योंकि सेवा एक सिंगलटन है, और अन्य सभी घटकों द्वारा साझा किया जाता है, किसी भी ऑब्जेक्ट को शॉपिंग कार्ट में लिखने और उससे डेटा खींचने की आवश्यकता होती है। यह हमेशा एक ही गाड़ी है।

सेवा ऑब्जेक्ट स्व-निहित AngularJS घटक हैं जिनका हम उपयोग कर सकते हैं और पुनः उपयोग कर सकते हैं जैसा कि हम फिट देखते हैं। वे सरल JSON ऑब्जेक्ट्स हैं जिनमें फ़ंक्शन और डेटा हैं। वे हमेशा एकल होते हैं, इसलिए यदि आप किसी सेवा में डेटा को एक स्थान पर संग्रहीत करते हैं, तो आप केवल उसी सेवा का अनुरोध करके उस डेटा को कहीं और प्राप्त कर सकते हैं।

निर्भरता इंजेक्शन (डीआई) बनाम अस्थिरता - उर्फ ​​डे-स्पेगेटिफिकेशन

AngularJS आपके लिए आपकी निर्भरता का प्रबंधन करता है। यदि आप एक वस्तु चाहते हैं, तो बस इसे देखें और AngularJS इसे आपके लिए प्राप्त कर लेगा।

जब तक आप इसका उपयोग करना शुरू नहीं करते, तब तक यह समझाना मुश्किल है कि यह कितना बड़ा समय है। AngularJS DI जैसा कुछ भी jQuery के अंदर मौजूद नहीं है।

DI का मतलब है कि अपने आवेदन को लिखने और उसे एक साथ वायर करने के बजाय, आप घटकों के एक पुस्तकालय को परिभाषित करते हैं, प्रत्येक को एक स्ट्रिंग द्वारा पहचाना जाता है।

मान लें कि मेरे पास 'फ़्लिकरस् सेवा' नामक एक घटक है जो फ़्लिकर से JSON फ़ीड्स को खींचने के तरीकों को परिभाषित करता है। अब, अगर मैं एक नियंत्रक लिखना चाहता हूं जो फ़्लिकर को एक्सेस कर सकता है, तो मुझे केवल नियंत्रक की घोषणा करते समय नाम से 'फ़्लिकरस्वाइस' का उल्लेख करना होगा। AngularJS घटक को तत्काल करने और इसे मेरे नियंत्रक को उपलब्ध कराने का ध्यान रखेगा।

उदाहरण के लिए, यहां मैं एक सेवा को परिभाषित करता हूं:

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

अब जब मैं उस सेवा का उपयोग करना चाहता हूं तो मैं इसे इस तरह से नाम से संदर्भित करता हूं:

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

AngularJS यह पहचानेगा कि कंट्रोलर को इंस्टेंट करने के लिए एक FlickrService ऑब्जेक्ट की आवश्यकता है, और हमारे लिए एक प्रदान करेगा।

यह तारों को एक साथ बहुत आसान बनाता है, और बहुत ज्यादा स्पगेटिफिकेशन की ओर किसी भी प्रवृत्ति को समाप्त करता है। हमारे पास घटकों की एक फ्लैट सूची है, और AngularJS उन्हें एक-एक करके हमारे पास सौंपता है, जब हमें उनकी आवश्यकता होती है।

मॉड्यूलर सेवा वास्तुकला

jQuery बहुत कम कहता है कि आपको अपने कोड को कैसे व्यवस्थित करना चाहिए। AngularJS की राय है।

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

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

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

सारांश में

AngularJS और jQuery दुश्मन नहीं हैं। यह बहुत अच्छी तरह से AngularJS भीतर jQuery का उपयोग करने के लिए संभव है। यदि आप अच्छी तरह से AngularJS (टेम्प्लेट, डेटा-बाइंडिंग, $ स्कोप, निर्देश आदि) का उपयोग कर रहे हैं, तो आप पाएंगे कि आपको बहुत कम jQuery की आवश्यकता है, अन्यथा आपको आवश्यकता हो सकती है।

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

विनीत जावास्क्रिप्ट के बारे में कम सोचें, और इसके बजाय HTML एक्सटेंशन के बारे में सोचें।

मेरी छोटी सी किताब

मैं AngularJS के बारे में बहुत उत्साहित हो गया, मैंने इस पर एक छोटी पुस्तक लिखी जिसका आप ऑनलाइन http://nicholasjohnson.com/angular-book/ पर पढ़ने के लिए बहुत स्वागत करते हैं । मुझे आशा है कि यह उपयोगी है।


6
"एमवीसी (मॉडल, व्यू, कंट्रोलर)" से अलग "चिंता का विषय" विचार पूरी तरह से फर्जी है। वेब भाषाओं को अलग करने का मॉडल (HTML, CSS, और JS) लोगों को वेब पेज (मार्कअप / HTML) पर सामान रखने की अनुमति के बिना ऐसा करता है कि यह कैसे दिखता है (स्टाइल / लेआउट / CSS) या यह "क्या करता है" (DOM इवेंट / AJAX / जावास्क्रिप्ट)। MVC भी चिंताओं को अलग करता है। MVC पैटर्न में प्रत्येक "लेयर" की एक अलग भूमिका होती है - डेटा, रूटिंग / लॉजिक या रेंडरिंग। परतों को कॉलबैक, मार्गों और मॉडल बाइंडिंग द्वारा युग्मित किया जाता है। सिद्धांत रूप में, एक व्यक्ति प्रत्येक परत में विशेषज्ञ हो सकता है, जो अक्सर होता है।

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

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

मुझे आपका उत्तर सबसे स्पष्ट और ज्ञानवर्धक लगता है। मैं यहां काफी नौसिखिया हूं, इसलिए, यदि मेरे पास मौजूदा पेज (जिसे मैं नियंत्रित नहीं करता हूं) को बदलने के लिए एक एक्सटेंशन है, तो क्या मुझे JQuery रखना चाहिए?
डेनियल मोलर

152

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

घोषणात्मक बनाम घोषणात्मक

JQuery के साथ आप डोम को बताते हैं कि क्या होने की जरूरत है, कदम से कदम। AngularJS के साथ आप वर्णन करते हैं कि आपको क्या परिणाम चाहिए लेकिन यह कैसे करना है। यहाँ इस पर अधिक । इसके अलावा, मार्क राजकोक का जवाब देखें।

मैं अलग-अलग तरीके से क्लाइंट-साइड वेब ऐप्स को कैसे डिज़ाइन और डिज़ाइन करूं?

AngularJS एक संपूर्ण क्लाइंट-साइड फ्रेमवर्क है जो MVC पैटर्न (उनके ग्राफिकल प्रतिनिधित्व की जांच ) का उपयोग करता है । यह चिंताओं को अलग करने पर बहुत ध्यान केंद्रित करता है।

सबसे बड़ा अंतर क्या है? मुझे क्या करना / उपयोग करना बंद कर देना चाहिए; इसके बजाय मुझे क्या करना / उपयोग करना शुरू करना चाहिए?

jQuery एक पुस्तकालय है

AngularJS एक सुंदर क्लाइंट-साइड फ्रेमवर्क है, जो उच्च परीक्षण योग्य है, जो टन के सामान जैसे MVC, निर्भरता इंजेक्शन , डेटा बाइंडिंग और बहुत कुछ को जोड़ती है ।

यह चिंताओं और परीक्षण ( इकाई परीक्षण और अंत-से-अंत परीक्षण) के पृथक्करण पर केंद्रित है , जो परीक्षण-संचालित विकास की सुविधा देता है।

शुरू करने का सबसे अच्छा तरीका उनके भयानक ट्यूटोरियल से गुजरना है । आप कुछ घंटों में चरणों से गुजर सकते हैं; हालाँकि, यदि आप पर्दे के पीछे की अवधारणाओं को मास्टर करना चाहते हैं, तो उनमें आगे पढ़ने के लिए संदर्भ का एक मिश्रण शामिल है।

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

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

ऐसा करने से आप उनके संसाधन कारखाने का लाभ उठा सकते हैं , जो आपके सर्वर साइड Restful API का एक एब्स्ट्रैक्शन बनाता है और सर्वर-साइड कॉल करता है (प्राप्त करें, सहेजें, हटाएं, आदि) अविश्वसनीय रूप से आसान है।


27
मुझे लगता है कि आप के बारे में कैसे jQuery एक "पुस्तकालय" और कोणीय एक "रूपरेखा" एक बात के लिए है ... बात करके ऊपर पानी muddying कर रहे हैं, मुझे लगता है कि लोगों का तर्क है कि jQuery संभव है है एक रूपरेखा ... यह एक अमूर्त है डीओएम हेरफेर और इवेंट हैंडलिंग। यह उसी तरह की चीज़ के लिए एक रूपरेखा नहीं हो सकती है जैसे कि कोणीय है, लेकिन यह दुविधा है कि प्रश्न पूछने वाला इसमें है: वे वास्तव में कोणीय और jQuery के बीच अंतर नहीं जानते हैं, और सभी प्रश्नकर्ता के लिए पता है, jQuery है ग्राहक-भारी वेबसाइटों के निर्माण के लिए एक रूपरेखा। इसलिए शब्दावली के बारे में बहस करने से चीजें साफ नहीं होंगी।
झंडो

15
मुझे लगता है कि आप वही हैं जो भ्रमित हो रहे हैं। यह सवाल बिल्कुल इस stackoverflow.com/questions/7062775 को संबोधित करता है । : इसके अलावा, इस सवाल का जवाब स्पष्ट क्या फर्क एक रूपरेखा और एक पुस्तकालय के बीच है मदद मिल सकती है stackoverflow.com/a/148759/620448
Ulises

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

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

84

"प्रतिमान बदलाव" का वर्णन करने के लिए, मुझे लगता है कि एक संक्षिप्त उत्तर पर्याप्त हो सकता है।

AngularJS आपके तत्वों को खोजने के तरीके को बदल देता है

में jQuery , आप आमतौर पर उपयोग चयनकर्ताओं तत्वों को खोजने के लिए, और फिर उन्हें ऊपर तार:
$('#id .class').click(doStuff);

में AngularJS , आप का उपयोग निर्देशों सीधे तत्वों को चिह्नित करने के लिए, उन्हें तार करने के लिए:
<a ng-click="doStuff()">

AngularJS को चयनकर्ताओं का उपयोग करने वाले तत्वों की आवश्यकता नहीं है (या चाहते हैं) - AngularJS के jqLite बनाम पूर्ण विकसित jQuery के बीच प्राथमिक अंतर यह है कि jqLite चयनकर्ताओं का समर्थन नहीं करता है

इसलिए जब लोग कहते हैं कि "jQuery को बिल्कुल भी शामिल न करें", यह मुख्य रूप से है क्योंकि वे नहीं चाहते कि आप चयनकर्ताओं का उपयोग करें; वे चाहते हैं कि आप निर्देशों का उपयोग करना सीखें। प्रत्यक्ष, चयन नहीं!


13
केवल एक अस्वीकरण के रूप में, कोणीय और jQuery के बीच कई और बड़े अंतर हैं। लेकिन तत्वों को खोजना वह है जिसमें सोच के सबसे बड़े बदलाव की आवश्यकता होती है।
स्कॉट रिपी

1
मुझे माफ कर दो अगर मैं गलत हूं, लेकिन मैंने सोचा कि एक चयनकर्ता था जो आप डोम तत्व को खोजने के लिए उपयोग करते हैं? आप अपने नए लोड किए गए यूआई के हर एक हिस्से को केवल एक या 2 तत्वों का चयन करने के बजाय एक उपयोगकर्ता द्वारा चयन करने वाले ऑन-द-फ्लाई को चुनने के बजाय संदर्भ में रखना पसंद करते हैं? मेरे लिए कठिन लगता है ..
RozzA

3
@AlexanderPritchard कोणीय का बिंदु क्या आप अपने जावास्क्रिप्ट से चयन नहीं करते हैं, आप अपने टेम्पलेट से निर्देशित करते हैं। यह नियंत्रण का विलोम है जो डिजाइनर के हाथों में शक्ति डालता है। यह एक जानबूझकर डिजाइन सिद्धांत है। वास्तव में कोणीय पाने के लिए आपको इस तरह से अपने कोड के बारे में सोचना होगा। यह एक कठिन बदलाव है।
सुपरल्यूमिनरी

3
@superluminary क्या शानदार बोली है! "चयन न करें; प्रत्यक्ष!" गंभीरता से, मैं उपयोग करने वाला हूं।
स्कॉट रिपी

1
यह AngularJS के बारे में मेरी पसंदीदा चीजों में से एक है। मुझे UX टीम को अपनी कार्यक्षमता को तोड़ने या मुझे उनकी शैलियों को तोड़ने के बारे में चिंता करने की आवश्यकता नहीं है। वे कक्षाओं का उपयोग करते हैं, मैं निर्देशों का उपयोग करता हूं, अवधि। मैं चयनकर्ताओं को एक सा याद नहीं करता।
adam0101

69

jQuery

jQuery हास्यास्पद रूप से getElementByHerpDerpछोटे और क्रॉस-ब्राउज़र जैसे लंबे जावास्क्रिप्ट कमांड बनाता है।

AngularJS

AngularJS आपको अपने स्वयं के HTML टैग / विशेषताएँ बनाने की अनुमति देता है जो गतिशील वेब अनुप्रयोगों के साथ अच्छी तरह से काम करते हैं (क्योंकि HTML को स्टैटिक के लिए डिज़ाइन किया गया था)।

संपादित करें:

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

jQuery ब्राउज़र में प्रोग्रामिंग जावास्क्रिप्ट को आसान बनाने का एक तरीका है। छोटा, क्रॉस-ब्राउज़र कमांड आदि।

AngularJS HTML बढ़ाता है, इसलिए आपको <div>केवल एक आवेदन करने के लिए सभी जगह नहीं डालनी है । यह HTML को वास्तव में अनुप्रयोगों के लिए काम करता है बजाय इसके कि इसे किस लिए डिज़ाइन किया गया था, जो स्थिर, शैक्षिक वेब पेज है। यह जावास्क्रिप्ट का उपयोग करते हुए एक गोल चक्कर तरीके से इसे पूरा करता है, लेकिन मूल रूप से यह HTML का एक विस्तार है, जावास्क्रिप्ट का नहीं।


@ रोबर्ट निर्भर करता है कि आप क्या कर रहे हैं। $(".myclass")बेहद आम है, और पीओ-जावास्क्रिप्ट की तुलना में jQuery में थोड़ा आसान है।
रोब ग्रांट

61

jQuery: आप DOM तत्वों के लिए 'QUERYING DOM ' के बारे में बहुत कुछ सोचते हैं और कुछ कर रहे हैं।

AngularJS: मॉडल सच्चाई है, और आप हमेशा उस ANGLE से सोचते हैं।

उदाहरण के लिए, जब आपको उस सर्वर से डेटा मिलता है जिसे आप DOM में किसी प्रारूप में jQuery में प्रदर्शित करना चाहते हैं, तो आपको '1' की आवश्यकता होगी। FIND 'जहाँ DOM में आप इस डेटा को रखना चाहते हैं,' 2। अद्यतन / वहाँ जोड़ें 'यह एक नया नोड बनाने या सिर्फ अपनी स्थापना करके innerHTML । फिर जब आप इस दृश्य को अपडेट करना चाहते हैं, तब आप '3। स्थान और '4' की खोज करें। अपडेट करें'। सर्वर से डेटा प्राप्त करने और प्रारूपित करने के एक ही संदर्भ में किए गए खोज और अद्यतन का यह चक्र AngularJS में चला गया है।

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

दूसरे तरीके से डालने के लिए, jQuery में, आपको सीएसएस चयनकर्ताओं के बारे में सोचने की ज़रूरत है, अर्थात्, जहां divया tdजिसमें एक वर्ग या विशेषता है, आदि, ताकि मुझे उनका HTML या रंग या मूल्य मिल सके, लेकिन AngularJS में, आप खुद को इस तरह सोचेंगे: मैं किस मॉडल के साथ काम कर रहा हूं, मैं मॉडल के मूल्य को सच कर दूंगा। आप अपने आप को परेशान नहीं कर रहे हैं कि क्या यह मान प्रतिबिंबित करने वाला एक चेक बॉक्स है या किसी tdतत्व में रहता है (विवरण जो आपको अक्सर jQuery के बारे में सोचने के लिए आवश्यक होगा)।

और AngularJS में DOM हेरफेर के साथ, आप खुद को निर्देश और फ़िल्टर जोड़ते हुए पाते हैं, जिसे आप मान्य HTML एक्सटेंशन के रूप में सोच सकते हैं।

एक और चीज़ जो आप AngularJS में अनुभव करेंगे: jQuery में आप jQuery फ़ंक्शंस को बहुत अधिक कहते हैं, AngularJS में, AngularJS आपके फ़ंक्शंस को कॉल करेगा, इसलिए AngularJS 'आपको चीज़ें करने का तरीका बताएगा', लेकिन लाभ इसके लायक हैं, इसलिए AngularJS सीखना आम तौर पर सीखने का मतलब है कि AngularJS क्या चाहता है या जिस तरह से AngularJS की आवश्यकता है कि आप अपने कार्यों को प्रस्तुत करते हैं और इसे तदनुसार कहेंगे। यह उन चीजों में से एक है जो लाइब्रेरी के बजाय एंगुलरजेएस को एक ढांचा बनाती है।


46

वे कुछ बहुत अच्छे हैं, लेकिन लंबे जवाब हैं।

मेरे अनुभवों को सम्‍मिलित करने के लिए:

  1. नियंत्रकों और प्रदाताओं (सेवाओं, कारखानों, आदि) डेटा मॉडल को संशोधित करने के लिए हैं, HTML नहीं।
  2. HTML और निर्देश लेआउट और मॉडल के लिए बाध्यकारी को परिभाषित करते हैं।
  3. यदि आपको नियंत्रकों के बीच डेटा साझा करने की आवश्यकता है, तो एक सेवा या कारखाना बनाएं - वे सिंगलटन हैं जो आवेदन भर में साझा किए जाते हैं।
  4. यदि आपको HTML विजेट की आवश्यकता है, तो एक निर्देश बनाएं।
  5. यदि आपके पास कुछ डेटा है और अब आप HTML ... STOP अपडेट करने का प्रयास कर रहे हैं! मॉडल को अपडेट करें, और सुनिश्चित करें कि आपका HTML मॉडल के लिए बाध्य है।

45

jQuery एक डोम हेरफेर लाइब्रेरी है।

AngularJS एक MV * ढांचा है।

वास्तव में, AngularJS कुछ जावास्क्रिप्ट MV * फ्रेमवर्क में से एक है (कई जावास्क्रिप्ट MVC उपकरण अभी भी श्रेणी पुस्तकालय के अंतर्गत आते हैं)।

एक फ्रेमवर्क होने के नाते, यह आपके कोड को होस्ट करता है और कॉल करने के समय और कब के बारे में फैसले का स्वामित्व लेता है!

AngularJS में ही इसके भीतर एक jQuery- लाइट संस्करण शामिल है। तो कुछ बुनियादी DOM चयन / हेरफेर के लिए, आपको वास्तव में jQuery लाइब्रेरी को शामिल करने की आवश्यकता नहीं है (यह नेटवर्क पर चलने के लिए कई बाइट्स बचाता है।)

AngularJS के पास DOM हेरफेर और पुन: प्रयोज्य UI घटकों को डिजाइन करने के लिए "निर्देश" की अवधारणा है, इसलिए जब भी आपको DOM हेरफेर संबंधित सामान करने की आवश्यकता महसूस हो तो इसका उपयोग करना चाहिए (निर्देश केवल वही स्थान हैं जहाँ आपको AngularJS के दौरान jQuery कोड लिखना चाहिए)।

AngularJS में कुछ सीखने की अवस्था (jQuery :-) से अधिक) शामिल है।

-> jQuery पृष्ठभूमि से आने वाले किसी भी डेवलपर के लिए, मेरी पहली सलाह होगी कि "AngularJS जैसे समृद्ध ढांचे पर कूदने से पहले जावास्क्रिप्ट को प्रथम श्रेणी की भाषा के रूप में सीखें!" मैंने उपरोक्त तथ्य को कठिन तरीके से सीखा।

सौभाग्य।


34

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

jQuery डोम हेरफेर के बारे में सब है। यह सभी क्रॉस ब्राउज़र दर्द को हल करता है अन्यथा आपको निपटना होगा लेकिन यह ऐसा ढांचा नहीं है जो आपको अपने ऐप को एंगुलरजेएस जैसे घटकों में विभाजित करने की अनुमति देता है।

AngularJs के बारे में एक अच्छी बात यह है कि यह आपको निर्देश में DOM हेरफेर को अलग / अलग करने की अनुमति देता है। एनजी-क्लिक के रूप में उपयोग करने के लिए आपके लिए तैयार किए गए निर्देश हैं। आप अपने स्वयं के कस्टम निर्देश बना सकते हैं जिसमें आपके सभी दृश्य तर्क या DOM हेरफेर शामिल होंगे ताकि आप नियंत्रकों या सेवाओं में mingle DOM मैनिपुलेशन कोड को समाप्त न करें जो कि व्यापार तर्क का ध्यान रखना चाहिए।

कोणीय आपके ऐप को - कंट्रोलर्स - सर्विसेज - व्यूज़ आदि में तोड़ देता है।

और एक बात और है, वह है निर्देश। यह एक विशेषता है जिसे आप किसी भी DOM तत्व के साथ जोड़ सकते हैं और आप अपने jQuery के बारे में चिंता किए बिना jQuery के साथ पागल हो सकते हैं और कभी भी AngularJs घटकों के साथ टकराव या इसकी वास्तुकला के साथ खिलवाड़ कर सकते हैं।

मैंने एक मीटअप से भाग लिया जिसे मैंने सुना, एंगुलर के संस्थापकों में से एक ने कहा कि उन्होंने डोम हेरफेर को अलग करने के लिए वास्तव में कड़ी मेहनत की है इसलिए उन्हें वापस शामिल करने की कोशिश न करें।


31

पॉडकास्ट जावास्क्रिप्ट जैबर को सुनें : एपिसोड # 32 जिसमें एंगुलरजेएस के मूल निर्माता शामिल हैं: मिसको हेवरी और इगोर मीनार। वे इस बारे में बहुत बात करते हैं कि अन्य जावास्क्रिप्ट पृष्ठभूमि, विशेष रूप से jQuery से AngularJS में आना क्या है।

पॉडकास्ट में किए गए बिंदुओं में से एक ने आपके प्रश्न के संबंध में मेरे साथ बहुत सारी बातें कीं:

MISKO : [...] उन चीजों में से एक जो हमने बहुत मुश्किल से एंगुलर में सोची थी , हम कैसे बहुत से बचने के हैच प्रदान करते हैं ताकि आप बाहर निकल सकें और मूल रूप से इससे बाहर निकलने का एक तरीका समझ सकें। तो हमारे लिए, इस उत्तर को "निर्देश" कहा जाता है। और निर्देशों के साथ, आप अनिवार्य रूप से एक नियमित रूप से छोटे jQuery जावास्क्रिप्ट बन जाते हैं, आप जो चाहें कर सकते हैं।

IGOR : तो संकलक को निर्देश के रूप में सोचें जो इसे बताता है जब भी आप इस निश्चित तत्व या सीएसएस में टेम्पलेट में आते हैं, और आप इस तरह का कोड रखते हैं और यह कोड तत्व का प्रभारी होता है और उस तत्व के नीचे सब कुछ DOM ट्री में।

पूरे प्रकरण का एक प्रतिलेख ऊपर दिए गए लिंक पर उपलब्ध है।

तो, आपके प्रश्न का सीधा उत्तर देने के लिए: AngularJS -very- राय है और एक सच्चा MV * ढांचा है। हालांकि, आप अभी भी सभी अच्छे सामानों को जान सकते हैं जो आप जानते हैं और निर्देशों के अंदर jQuery के साथ प्यार करते हैं। यह "मैं jQuery में कैसे इस्तेमाल करते हैं?" के रूप में ज्यादा के रूप में यह "मैं jQuery में करने के लिए इस्तेमाल किया सामान के साथ AngularJS पूरक कैसे करूँ?"

यह वास्तव में दो अलग-अलग अवस्थाएं हैं।


2
मुझे यकीन नहीं है कि मैं काफी सहमत हो जाएगा कोणीय बहुत राय है। आप राय चाहते हैं, एम्बर को देखें। गोल्डीलॉक्स की राय के रूप में मैं कोणीय को चित्रित करूंगा - जो कुछ भी मैं देख रहा हूं, उसके लिए jQuery के पास बहुत कम राय हैं और एम्बर बहुत अधिक हैं। कोणीय सही लगता है।
मूर्ख 4जेसस

30

मुझे यह सवाल दिलचस्प लगता है, क्योंकि जावास्क्रिप्ट प्रोग्रामिंग के लिए मेरा पहला गंभीर जोखिम Node.js और AngularJS था। मैंने jQuery कभी नहीं सीखा, और मुझे लगता है कि यह एक अच्छी बात है, क्योंकि मुझे कुछ भी अनजान नहीं करना है। वास्तव में, मैं सक्रिय रूप से अपनी समस्याओं के लिए jQuery के समाधान से बचता हूं, और इसके बजाय, उन्हें हल करने के लिए "AngularJS रास्ता" के लिए पूरी तरह से देखता हूं। इसलिए, मुझे लगता है कि इस सवाल का मेरा जवाब अनिवार्य रूप से उबालने वाला होगा, "किसी ऐसे व्यक्ति के बारे में सोचें, जिसने कभी jQuery नहीं सीखा है" और सीधे jQuery को शामिल करने के किसी भी प्रलोभन से बचें (जाहिर है AngularJS इसे कुछ हद तक पर्दे के पीछे उपयोग करता है)।


23

AngularJS और jQuery:

JQLite कार्यक्षमता को छोड़कर AngularJs और JQuery हर स्तर पर पूरी तरह से अलग हैं और AngularJs की मुख्य विशेषताओं को सीखना शुरू करने के बाद आप इसे देखेंगे (मैंने इसे नीचे समझाया)।

AngularJs एक क्लाइंट साइड फ्रेमवर्क है जो स्वतंत्र क्लाइंट साइड एप्लीकेशन बनाने की पेशकश करता है। JQuery एक क्लाइंट साइड लाइब्रेरी है जो DOM के आसपास खेलता है।

AngularJs Cool Principle - यदि आप मॉडल डेटा परिवर्तन के दृष्टिकोण से अपने UI के बारे में कुछ बदलाव चाहते हैं। अपना डेटा बदलें और UI स्वयं को फिर से प्रस्तुत करेगा। जब तक और जब तक इसकी आवश्यकता न हो, तब तक आपको हर बार DOM के आसपास खेलने की ज़रूरत नहीं है और इसे Angular Directives के माध्यम से भी नियंत्रित किया जाना चाहिए।

इस प्रश्न का उत्तर देने के लिए, मैं अपना अनुभव AngularJS के साथ पहले एंटरप्राइज़ एप्लिकेशन पर साझा करना चाहता हूं। ये सबसे भयानक विशेषताएं हैं जो कोणीय प्रदान करती हैं जहां हम अपनी jQuery मानसिकता को बदलना शुरू करते हैं और हम एक ढांचे की तरह कोणीय प्राप्त करते हैं और पुस्तकालय नहीं।

दो-तरफ़ा डेटा बाइंडिंग अद्भुत है: मेरे पास सभी कार्यक्षमता UPDATE, DELTE, INSERT के साथ एक ग्रिड था। मेरे पास एक डेटा ऑब्जेक्ट है जो एनजी-रिपीट का उपयोग करके ग्रिड के मॉडल को बांधता है। आपको केवल हटाने और सम्मिलित करने के लिए सरल जावास्क्रिप्ट कोड की एक पंक्ति लिखने की आवश्यकता है और वह यह है। ग्रिड स्वचालित रूप से अद्यतन करता है क्योंकि ग्रिड मॉडल तुरंत बदल जाता है। अद्यतन कार्यक्षमता वास्तविक समय है, इसके लिए कोई कोड नहीं है। तुम्हे बड़ा अच्छा लग रहा है!!!

पुन: प्रयोज्य निर्देश सुपर हैं: निर्देश को एक स्थान पर लिखें और पूरे अनुप्रयोग में इसका उपयोग करें। हे भगवान!!! मैंने इन निर्देशों का उपयोग पेजिंग, रेगेक्स, सत्यापन आदि के लिए किया है, यह वास्तव में अच्छा है!

रूटिंग मजबूत है: यह आपके कार्यान्वयन पर निर्भर है कि आप इसका उपयोग कैसे करना चाहते हैं, लेकिन HTML और नियंत्रक (जावास्क्रिप्ट) को निर्दिष्ट करने के अनुरोध को रूट करने के लिए कोड की बहुत कम लाइनों की आवश्यकता होती है

नियंत्रक महान हैं: नियंत्रक अपने स्वयं के HTML का ध्यान रखते हैं, लेकिन यह पृथक्करण सामान्य कार्यक्षमता के लिए भी अच्छा काम करता है। यदि आप मास्टर HTML पर एक बटन के क्लिक पर एक ही फ़ंक्शन को कॉल करना चाहते हैं, तो प्रत्येक नियंत्रक में समान फ़ंक्शन नाम लिखें और व्यक्तिगत कोड लिखें।

प्लगइन्स: आपके ऐप में ओवरले दिखाने जैसी कई अन्य सुविधाएँ हैं। आपको इसके लिए कोड लिखने की आवश्यकता नहीं है, बस wc-overlay के रूप में उपलब्ध एक ओवरले प्लगइन का उपयोग करें, और यह स्वचालित रूप से सभी XMLHttpRequest (XHR) अनुरोधों का ध्यान रखेगा ।

रेस्टफुल आर्किटेक्चर के लिए आदर्श : एक पूर्ण फ्रेमवर्क होने के कारण एंगुलरजेएस को रैस्टफुल आर्किटेक्चर के साथ काम करना बहुत अच्छा लगता है। REST CRUD API को कॉल करना बहुत आसान है और

सेवाएँ : नियंत्रकों में सेवाओं और कम कोड का उपयोग करके सामान्य कोड लिखें। नियंत्रकों के बीच सामान्य क्रियाकलापों को साझा करने के लिए सेविंग्स का उपयोग किया जा सकता है।

एक्स्टेंसिबिलिटी : कोणीय निर्देशों का उपयोग करके कोणीय ने HTML निर्देशों को बढ़ाया है। Html के अंदर भाव लिखें और रनटाइम पर उनका मूल्यांकन करें। अपने स्वयं के निर्देश और सेवाएं बनाएं और उन्हें बिना किसी अतिरिक्त प्रयास के किसी अन्य परियोजना में उपयोग करें।


20

जावास्क्रिप्ट MV के रूप में * शुरुआत और विशुद्ध रूप से एप्लिकेशन आर्किटेक्चर (सर्वर / क्लाइंट-साइड मामलों पर नहीं) पर ध्यान केंद्रित करते हुए, मैं निश्चित रूप से निम्नलिखित संसाधन (जो मुझे आश्चर्य नहीं है कि अभी तक उल्लेख नहीं किया गया है) की सिफारिश करेगा: Addy Osmani द्वारा जावास्क्रिप्ट डिजाइन पैटर्न विभिन्न जावास्क्रिप्ट डिजाइन पैटर्न के लिए एक परिचय के रूप में । इस उत्तर में प्रयुक्त शब्द उपरोक्त लिंक किए गए दस्तावेज़ से लिए गए हैं। मैं स्वीकार किए गए उत्तर में जो अच्छी तरह से लिखा गया था उसे दोहराने नहीं जा रहा हूं। इसके बजाय, यह उत्तर उस सैद्धांतिक पृष्ठभूमि से जुड़ता है जो AngularJS (और अन्य लाइब्रेरी) को शक्ति प्रदान करती है।

मेरी तरह, आप जल्दी से महसूस करेंगे कि AngularJS (या Ember.js , Durandal, और उस मामले के लिए अन्य MV * चौखटे) एक जटिल ढांचा है जो विभिन्न जावास्क्रिप्ट डिज़ाइन पैटर्न के कई संयोजन है।

मैंने यह भी आसान पाया कि (1) देशी जावास्क्रिप्ट कोड और (2) छोटे पुस्तकालयों का परीक्षण करने के लिए इनमें से प्रत्येक पैटर्न के लिए अलग-अलग एक वैश्विक ढांचे में गोता लगाने से पहले। इसने मुझे यह समझने की अनुमति दी कि कौन से महत्वपूर्ण मुद्दे एक रूपरेखा को स्वीकार करते हैं (क्योंकि आप व्यक्तिगत रूप से समस्या का सामना कर रहे हैं)।

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

  • जावास्क्रिप्ट ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (यह एक Google खोज लिंक है)। यह एक पुस्तकालय नहीं है, लेकिन निश्चित रूप से किसी भी अनुप्रयोग प्रोग्रामिंग के लिए एक शर्त है। इसने मुझे प्रोटोटाइप, कंस्ट्रक्टर, सिंगलटन और डेकोरेटर पैटर्न के मूल कार्यान्वयन सिखाए
  • मुखौटा पैटर्न के लिए jQuery / अंडरस्कोर (जैसे डोम में हेरफेर के लिए WYSIWYG की तरह)
  • Prototype.js के लिए प्रोटोटाइप / निर्माता / mixin पैटर्न
  • मॉड्यूल पैटर्न / एएमडी के लिए आवश्यकताएँ / कर्ल.जेएस
  • अवलोकन योग्य, प्रकाशन / सदस्यता पैटर्न के लिए नॉकआउट जे.एस.

NB: यह सूची पूर्ण नहीं है, और न ही 'सर्वश्रेष्ठ पुस्तकालय'; वे सिर्फ मेरे द्वारा उपयोग किए जाने वाले पुस्तकालयों के रूप में होते हैं। इन पुस्तकालयों में अधिक पैटर्न भी शामिल हैं, जिन लोगों का उल्लेख किया गया है, वे केवल उनके मुख्य फोकस या मूल इरादे हैं। यदि आपको लगता है कि इस सूची से कुछ गायब है, तो कृपया टिप्पणियों में इसका उल्लेख करें, और मुझे इसे जोड़ने में खुशी होगी।


12

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

मैं आमतौर पर AngularJS और कॉर्डोवा का उपयोग करके मोबाइल एप्लिकेशन विकसित करता हूं । केवल jQuery से मुझे जरूरत है चयनकर्ता है।

गुग्लिंग करके, मैं देखता हूं कि वहाँ एक स्टैंडअलोन jQuery चयनकर्ता मॉड्यूल है। यह Sizzle है।

और मैंने एक छोटा कोड स्निपेट बनाने का फैसला किया, जो मुझे jQuery चयनकर्ता (Sizzle का उपयोग करके) की शक्ति के साथ AngularJS का उपयोग करके जल्दी से एक वेबसाइट शुरू करने में मदद करता है।

मैंने अपना कोड यहां साझा किया: https://github.com/huytd/Sizzular

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