2016-01-21 5 views
8

मैं अपनी परियोजना के भीतर कोणीय सामग्री का उपयोग कर रहा हूं। मैं कई संवादों का उपयोग करता हूं (केवल सतर्क उद्देश्यों के लिए), लेकिन अब मुझे काफी जटिल संवाद की आवश्यकता है।एक कोणीय सामग्री संवाद के साथ एक ही नियंत्रक का उपयोग कैसे करें?

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>' + 
     ' <md-dialog-actions>' + 
     ' <md-button ng-click="closeDialog()" class="md-primary">' + 
     '  Close Dialog' + 
     ' </md-button>' + 
     ' </md-dialog-actions>' + 
     '</md-dialog>', 
    locals: { 
     items: $scope.items 
    }, 
    controller: DialogController 
    }); 

    function DialogController($scope, $mdDialog, items) { 
    $scope.items = items; 
    $scope.closeDialog = function() { 
     $mdDialog.hide(); 
    } 
    } 
} 

इसके बजाय, यह संभव होगा $mdDialog के लिए संदर्भित नहीं करने के लिए एक controller, और बस यह एक ही नियंत्रक जहां यह था उपयोग करने के लिए अनुमति देने के लिए:

यह उदाहरण है कि कोणीय सामग्री साइट का उपयोग करता है से बुलाया

उदाहरण के लिए, यदि इसे इस बटन के माध्यम से बुलाया जाता है, तो संवाद आसानी से MyCtrl नियंत्रक का उपयोग करेगा ताकि संवाद स्कोप चर का उपयोग कर सके।

<div ng-controller="MyCtrl"> 
    <md-button ng-click="showDialog($event)" class="md-raised"> 
    Custom Dialog 
    </md-button> 
</div> 

क्या यह संभावना है? या मुझे आगे बढ़ने वाले चर रखने के लिए प्रसारण के साथ locals संपत्ति का लगातार उपयोग करना चाहिए?

+0

उपयोग माता पिता नियंत्रक का नाम:

.controller('AppCtrl', function($scope, $mdDialog, $mdMedia) { var self = this; this.showTabDialog = function(ev) { $mdDialog.show({ controller: function() { return self; }, controllerAs: 'ctrl', templateUrl: 'tabDialog.tmpl.html', }); }; }); 

मैं डॉक्स से मूल उपयोग उदाहरण संशोधित : $ mdDialog.show ({ नियंत्रक: MyCtrl}); – Sandeep

+1

@ संदीप - लेकिन क्या वह उस नियंत्रक का एक नया उदाहरण नहीं बनायेगा? इसलिए उस संवाद के लिए एक नया दायरा बनाना? – Fizzix

उत्तर

24

यदि आप controllerAs का उपयोग करते हैं तो आप ऐसा कर सकते हैं। मुझे लगता है कि जैसे ES6 के साथ कर रहा हूँ:

this.$mdDialog.show({ 
    targetEvent: event, 
    templateUrl: 'path/to/my/template.html', 
    controller:() => this, 
    controllerAs: 'ctrl' 
}); 

ES6 यह इस तरह दिखेगा के बिना: http://codepen.io/kuhnroyal/pen/gPvdPp

+1

बहुत अच्छा दृष्टिकोण। अच्छा काम करता है। – Fizzix

+0

मुझे इस विकल्प को नहीं पता है। आपको बहुत - बहुत धन्यवाद! – troig

+0

आपकी मदद के लिए धन्यवाद = डी ... +1 –

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