2016-04-07 7 views
0

Wie kann ich den Bereich zwischen Controller und $ mdDialog (Angular Material) teilen? Ich benutze "Controller As" -Syntax, und ich muss Funktionen meines Controllers in $ mdDialog Ursache verwenden, wenn es geschlossen wird, werde ich einige Daten benötigen. In diesem Code muss ich "myFunction" in $ mdDialog aufrufen. tritt auf, wenn ich ein Objekt (self.obj) habe und ich es in 'myFunction' brauche, wenn $ mdDialog 'myFunction' aufruft, existiert das Objekt nicht in dem Bereich.

angular.module('myApp') 
      .controller('myController', myController); 

myController.$inject = ['$mdDialog']; 

function myController($mdDialog) { 

var self = this; 
self.obj = {'firstName:'hello','lastName':'world'} 


self.myFunction = function() {console.log(JSON.stringfy(self.obj))}; 

self.showDialog = function(){ 

    $mdDialog.show({ 
     controller: function ctrl() {}, 
     controllerAs: 'ctrl', 
     templateUrl: 'views/modal_templates/dialog01.template.html', 
     parent: angular.element(document.body), 
     targetEvent: ev, 
     clickOutsideToClose: true 
    }) 
} 

}; 

Antwort

0

Sie können die Option lokal verwenden, um myFunction zu injizieren. Verwenden Sie dann die Methode bind(), um eine neue Funktion zu erstellen, deren eigenes Schlüsselwort auf self gesetzt ist.

Die bind() Methode erzeugt eine neue Funktion, die, wenn, hat sein dieses Schlüsselwort auf den vorgesehenen Wert

self.myFunction = function() {console.log(JSON.stringfy(this.obj))}; 

$mdDialog.show({ 
    controller: function ctrl(myfunction) { }, 
    controllerAs: 'ctrl', 
    templateUrl: 'views/modal_templates/dialog01.template.html', 
    parent: angular.element(document.body), 
    targetEvent: ev, 
    clickOutsideToClose: true, 
    locals: { 
     myfunctiion: myFunction.bind(self), 

    } 
}) 
+0

Dank Awakening Byte, ich habe meine Frage bearbeitet besser zu erklären. Mein Problem ist, dass ich ein Objekt in 'myFunction' brauche, und ich werde dieses Objekt in einer MD-Schaltfläche auf meiner modalen Vorlage aktualisieren. –

+0

aktualisierte die Antwort. Sie müssen bind() -Methode verwenden, um den Kontext zu self zu sperren –

+0

Danke, es hat mein Problem gelöst. –

2

In dem Controller genannt:

.controller('testing', 
     function($scope, $mdDialog) { 
$scope.items = [0, 1, 2, 3]; 
    $scope.addAddress = function(ev) 
    { 
     $mdDialog.show({ 
      controller:() => this, 
       controllerAs: 'ctrl', 
       templateUrl: 'views/address.html', 
       targetEvent: ev, 
       clickOutsideToClose:true, 
       locals: { 
        items: $scope.items, 
       }, 
       }); 
    }; 

In address.html, Zugangspunkt mit 'ctrl'

<din ng-repeat="items in ctrl.items"> 
{{ items }} 
</div> 

ich diese Lösung auf den folgenden Link bekommen: https://github.com/angular/material/issues/1531

Verwandte Themen