2016-10-27 2 views
0

Ich versuche herauszufinden, ob ein Modal geöffnet oder geschlossen ist. Aber ich bekomme den Fehler kann Eigenschaft von open nicht lesen. Ich verstehe, muss in die $ modal.open einhaken und das Ergebnis bekommen. Ich habe diese question als ein Beispiel verwendet, aber immer noch den Fehler bekommen. Meine Absichten, wenn dieses Modal offen ist, dann kann ich die nächste Aufforderung nicht öffnen. Aber wenn das Modal geschlossen ist, habe ich eine andere modale Aufforderung zum Öffnen. Ich weiß nicht, ob ich es nur zu lange ansehe, aber alle Vorschläge sind willkommen. Hier DankeWie kann ich feststellen, ob angularjs modal geöffnet ist?

ist der modale Code aus einer anderen modal.js Datei:

function openSerialEntry($modal, $scope, item, onupdate) { 
    var modalInstance = $modal.open({ 
     templateUrl: "sales/partials/serialNumberEntry.html", 
     size: "med", 
     backdrop: "static", 
     keyboard: false, 
     controller: serialNumberCtlr, 
     controllerAs: "vm", 
     resolve: { 
      item: function() { return item; }, 
      onupdate: function() { return onupdate; }, 
     } 
    }); 

    modalInstance.result.then(function (result) { 
     onupdate(result); 
    }, function() { 

    }); 
} 

Hier ist mein Controller, wo nur eine Variable zu setzen versucht:

$scope.modalOpen = false; 

    commonModals().openSerialEntry().opened.then(function() { 
     $scope.modalOpen = true; 
    }); 

Fehler: Typeerror: kann nicht lesen Eigenschaft 'offen' von undefined bei Object.openSerialEntry (modals.js: 347)

+0

Haben Sie das versucht? $ (".modal"). On ('showed.bs.modal', Funktion() { $ scope.modalOpen = true; }); – Steeno

+0

Sie sollten die Definition Ihres Controllers angeben. Wir können von hier aus nicht erkennen, welche Funktion die Controller-Funktion ist. Es sieht so aus als wäre "openSerialEntry" Ihre Controller-Funktion, aber das ist ein seltsamer Name für einen Controller. –

Antwort

1

Da übergeben Sie $modal nicht an die Funktion openSerialEntry, es ist undefined und deshalb erhalten Sie einen Fehler Cannot read property 'open' of undefined. Ich nehme an, Sie müssen $modal in Ihren Controller injizieren und es an openSerialEntry übergeben. Außerdem geben Sie nichts von der openSerialEntry-Funktion zurück, so dass der nächste Fehler Cannot read property 'then' of undefined wäre. Hier

ist der Code, der diese Probleme behebt:

function openSerialEntry($modal, $scope, item, onupdate) { 
    var modalInstance = $modal.open({ 
     templateUrl: "sales/partials/serialNumberEntry.html", 
     size: "med", 
     backdrop: "static", 
     keyboard: false, 
     controller: serialNumberCtlr, 
     controllerAs: "vm", 
     resolve: { 
      item: function() { return item; }, 
      onupdate: function() { return onupdate; }, 
     } 
    }); 

    return modalInstance.result.then(function (result) { 
     onupdate(result); 
    }, function() { 

    }); 
} 

yourcontrollerfunction.$inject = ['$modal']; 

commonModals().openSerialEntry($modal, $scope, item, onupdate).then(function() { 
    $scope.modalOpen = true; 
}); 
+0

@TroyBryant, hat meine Antwort geholfen? –

+0

funktionierte wie ein Charme dank - ein paar Verbesserungen für alle Vorschläge gemacht und es funktioniert –

+0

Gern geschehen) –

0

Sie enthalten nicht die Abhängigkeit von dem Modul mit dem $ modal-Dienst in Ihrem App-Modul.

Verwandte Themen