2015-04-27 15 views
7

तो मैं निर्देश, सेवाएं और नियंत्रकों के बारे में पढ़ रहा हूं। मुझे लगा जैसे मुझे पता चला कि वहां क्या चल रहा है। उदाहरण के लिए डोम हेरफेर एक निर्देश में होता है, एपीआई कॉल एक सेवा में होती है। तब मुझे एक मॉडल बनाने की जरूरत थी। मेरी मुट्ठी सोचा था कि यह एक निर्देश है, फिर मैंने एंगुलर यूआई को देखा और उन्होंने इसे एक सेवा के रूप में स्थापित किया है। मैं इसे एक सेवा के रूप में देखकर आश्चर्यचकित हुआ। क्या यह करने का सही तरीका है, या यह माना जाता है और विरोधी पैटर्न है? मैंने पढ़ा कि सीखने के दौरान कोणीय यूआई एक अच्छी जगह है, लेकिन मुझे यकीन नहीं है? एक मॉडल अधिक भ्रमित है तो मुझे उम्मीद है।Angularjs में एक मॉडल एक सेवा या निर्देश होना चाहिए?

+1

मैं देख सकता हूं कि यह निर्देश है, आपने इसे सेवा के रूप में कहाँ देखा? – ABOS

+0

@ABOS [कोड] में (https://github.com/angular-ui/bootstrap/blob/master/src/modal/modal.js) आप देख सकते हैं कि 2 कारखानों को परिभाषित किया गया है (पहली चीज़ सहित , शायद ओपी क्या सोच रहा है?), लेकिन कई निर्देश भी परिभाषित किए गए हैं। –

+0

@ABOS इसके अलावा, यह वास्तव में समझ में आता है कि यह एक सेवा है।आप जेएस कोड में अपना मोडल परिभाषित करते हैं और बस कुछ एचटीएमएल (आमतौर पर निर्देश के रूप में) में गुजरते हैं, इसलिए हाँ, इसे एक सेवा (सहायक निर्देशों के साथ) के रूप में परिभाषित किया जाता है। –

उत्तर

3

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

उदाहरण देना करने के मैं क्या कह रहा हूँ, इस उदाहरण a similar question से लिया पर एक नज़र डालें मैं कुछ समय पहले उत्तर दिया:

पहल दृष्टिकोण

app.controller('Ctrl', function($scope, $dialog) { 
    $scope.doSomething = function() { 
     $dialog.dialog().open().then(function(result) { 
      if (result === 'OK') { 
       // Process OK 
      } 
      else { 
       // Process anything else 
      } 
     }); 
    } 
}); 

दिन AngularUI के $modal था में वापस $dialog कहा जाता है।

घोषणात्मक दृष्टिकोण

<dialog visible="dialogVisible" callback="dialogCallback()"></dialog> 

... 

app.controller('Ctrl', function($scope) { 
    $scope.doSomething = function() {  
     $scope.dialogVisible = true; 
    } 

    $scope.dialogCallback = function(result) { 
     if (result === 'OK') { 
      // Process OK 
     } 
     else { 
      // Process anything else 
     } 
    } 
}); 

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

आईएमओ डीओएम हेरफेर केवल एक निर्देश में होता है कथन एक कठिन नियम की तुलना में एक (बहुत) मजबूत सिफारिश की तरह है। यह इतने लोग मौजूद हैं - विशेष रूप से कोणीय के लिए नवागंतुक - सेवाओं और नियंत्रकों के भीतर से डीओएम तक पहुंचने से बचें।

0

मेरे पास यह वही प्रश्न था जब मुझे हमारे कोड को पुन: सक्रिय करने की आवश्यकता थी, जिसमें आवेदन में अधिक संवाद की अनुमति थी। हम वर्तमान में Angularjs 1.6 का उपयोग कर रहे हैं।

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

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

एक और सत्यापन के रूप में, मैंने पाया कि कोणीय यूआई टीम मोडल सेवा बनाने के लिए एक समान दृष्टिकोण का उपयोग करती है: $uibModal

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