2015-05-08 6 views
6

Material Design mdDialog documentation में, मैंने देखा है कि उन्होंने DialogController पर नीचे एक दायरा (प्रीफिक्स्ड डॉलर चिह्न के बिना) पास किया है।

(function(angular, undefined){ 
    "use strict"; 
    angular 
    .module('demoApp', ['ngMaterial']) 
    .controller('AppCtrl', AppController); 
    function AppController($scope, $mdDialog) { 
    var alert; 
    $scope.showAlert = showAlert; 
    $scope.showDialog = showDialog; 
    $scope.items = [1, 2, 3]; 
    // Internal method 
    function showAlert() { 
     alert = $mdDialog.alert({ 
     title: 'Attention', 
     content: 'This is an example of how easy dialogs can be!', 
     ok: 'Close' 
     }); 
     $mdDialog 
     .show(alert) 
     .finally(function() { 
      alert = undefined; 
     }); 
    } 
    function showDialog($event) { 
     var parentEl = angular.element(document.body); 
     $mdDialog.show({ 
     parent: parentEl, 
     targetEvent: $event, 
     template: 
      '<md-dialog aria-label="List dialog">' + 
      ' <md-dialog-content>'+ 
      ' <md-list>'+ 
      '  <md-list-item ng-repeat="item in items">'+ 
      '  <p>Number {{item}}</p>' + 
      '  '+ 
      ' </md-list-item></md-list>'+ 
      ' </md-dialog-content>' + 
      ' <div class="md-actions">' + 
      ' <md-button ng-click="closeDialog()" class="md-primary">' + 
      '  Close Dialog' + 
      ' </md-button>' + 
      ' </div>' + 
      '</md-dialog>', 
     locals: { 
      items: $scope.items 
     }, 
     controller: DialogController 
     }); 
     function DialogController(scope, $mdDialog, items) { 
     scope.items = items; 
     scope.closeDialog = function() { 
      $mdDialog.hide(); 
     } 
     } 
    } 
})(angular); 

मैं पढ़ा है कि $ एक नामकरण परंपरा और एक अच्छा तरीका है यकीन है कि चर ओवरराइट नहीं मिलता है बनाने के लिए है। यह कोड उस सम्मेलन का पालन करने में असफल क्यों है? I.e इस संदर्भ में, हम कैसे जानते हैं कि $ का उपयोग कब करें या नहीं, और महत्व क्या है? मुझे विश्वास है कि इस मामले में यह सिर्फ नामकरण सम्मेलन से अधिक होना चाहिए, या लेखकों ने निरंतरता के प्रयोजनों के लिए $scope का उपयोग करना चुना होगा।

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

धन्यवाद!

+2

सही @Freelancer Thats। DialogController फ़ंक्शन एक सामान्य फ़ंक्शन है और एक कोणीय नियंत्रक या कोणीय निर्देश नियंत्रक नहीं है। दायरा सिर्फ तर्क का दिया गया नाम है। यह इंजेक्शन $ गुंजाइश नहीं है। –

+1

अंतर्दृष्टि के लिए धन्यवाद-हालांकि, यह $ mdDialog.show ({नियंत्रक: DialogController}) के माध्यम से नियंत्रक के रूप में सूचीबद्ध है; ? –

+1

और, अगर, यह नियंत्रक नहीं है-यह वास्तव में क्या कर रहा है? :-) धन्यवाद। –

उत्तर

5

मुझे लगता है कि दस्तावेज़ एक ही समय में सही होने पर असंगत हैं।

scope और $scope यहां समान होंगे, लेकिन मुझे केवल स्रोत कोड पढ़ने के बाद ही पता चला। अपराधी रेखा InterimElement के अंदर है जहां localsoptions द्वारा बढ़ाया गया है जो बदले में scope संपत्ति है।

return showDone = compilePromise.then(function(compileData) { 
       angular.extend(compileData.locals, self.options); 

       element = compileData.link(options.scope); 

मैं बहुत यकीन है कि होने scope रूप $scope सुलभ केवल घटना से और चीजों को साफ एक $scope का उपयोग करना चाहिए नियंत्रकों में $injector अर्थात तरह द्वारा प्रदान की मूल्य का उल्लेख करने के रखने के लिए है हूँ।

मैंने असंगतता को ठीक करने और a pen demonstrating the usage संकलित करने के लिए a pull request सबमिट किया है।

+2

आप रॉक। बहुत बहुत धन्यवाद! उस के चारों ओर अपने सिर लपेटने में बहुत परेशानी हो रही थी। –

0

यह सम्मेलन में विफलता नहीं है, न कि मोडल का उपयोग करने के लिए आपको प्राप्त स्निपेट पर भी विफलता नहीं है।

scope का उपयोग, और $scope नहीं, यह नेस्टेड फ़ंक्शन के अंदर वर्रों को ओवरराइट करने से बचने के लिए है।

scope को एक द्विध्रुवीय हस्ताक्षर के बिना रखने के विकल्प को त्रुटियों से बचने के लिए, जिसके लिए स्निपेट प्राप्त होगा।

उदाहरण के लिए Controller as वाक्यविन्यास का उपयोग करके चीजों को अलग करना, चीजों को साफ़ करने में मदद कर सकता है।

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