2016-12-22 5 views
0

Ich muss ein Modal aus dem Hauptmenü anzeigen. Das Modal wird korrekt angezeigt. Aber wenn ich das Modal schließe, möchte ich, dass die vorherige URL angezeigt wird. Dies ist der Code für den Modal:angular state.go Funktion leitet nicht zur vorherigen Seite um

.config(function ($stateProvider, $urlRouterProvider) { 
    $stateProvider 
     .state('home', { 
     url: '/home', 
     templateUrl: 'views/home.html', 
     controller: 'HomeCtrl' 
     }) 
     .state('pos',{ 
     url: '/pos', 
     templateUrl: 'views/pos.html', 
     controller: 'PosCtrl' 
     }) 
     .state('vAnalyze',{ 
     url: '/vAnalyze', 
     templateUrl: 'views/vAnalyze.html', 
     controller: 'VAnalyzeCtrl' 
     }) 
     .state('reportSetting',{ 
     url: '/reportSettingModal', 
     onEnter: function($modal){ 
      $modal.open({ 
       templateUrl: 'views/reportSettingModal.html', 
       controller: 'ReportSettingModalCtrl' 
      }); 
     } 
     }) 
     .state('error', { 
     url: '/error', 
     templateUrl: 'lib/views/error.html', 
     controller: 'ErrorCtrl' 
     }); 

    // if none of the above states are matched, use this as the fallback 
    $urlRouterProvider.otherwise('/home'); 
    }) 

    .run(['AuthService', 'configSettings', '$rootScope', function (AuthService, configSettings, $rootScope) 
    { // Apply Product Code 
    configSettings.productCode = 'VANALYZE'; 
    AuthService.configProduct(configSettings.productCode); 
    $rootScope.$on('$stateChangeSuccess', function(event, to, toParams, from, fromParams) { 
     $rootScope.$previousState = from; 
    }); 
    } ]); 

Dies ist die Funktion des modalen zu schließen:

$scope.close = function() { 
     $uibModalInstance.close(); 
     $state.go($rootScope.$previousState.name, { 
     url: $rootScope.$previousState.url, 
     templateUrl: $rootScope.$previousState.templateUrl, 
     controller: $rootScope.$previousState.controller 
     }); 
    }; 

Als ich in den Code der URL, templateUrl und Controller haben alle die richtigen Daten treten. Aber die Seite wird nicht angezeigt. Die Seite, die beim Schließen des Modales angezeigt wird, lautet reportSettingModal.

Was mache ich falsch?

+0

Ändert sich die URL, oder passiert das nicht? BTW - warum übergeben Sie dieses Objekt an $ state.go zweiten Parameter. Auch verwende ich Router für Modale nie, aber es hängt von der UC ab (z. B. das Modal sollte Lesezeichen-fähig sein) –

+0

Die URL ändert sich, wenn ich das Modal von verschiedenen Seiten einleite. Für die Funktion state.go habe ich folgendes versucht: '$ state.go ($ rootScope. $ PreviousState.name)' Aber die Seite hat sich nicht geändert. SO dachte ich, wenn es expliziter wäre, würde es funktionieren. Aber es tat es nicht. Ich weiß nicht, was du meinst, wenn du einen Router für Mods verwendest. Normalerweise habe ich Modale von einer Seite aufgerufen und wenn sie geschlossen wird, ist die Hauptseite sichtbar. Dieses Modal wird aus dem Hauptmenü aufgerufen. –

+0

Tun Sie einfach das Modal-Öffnen von dem ng-Klick der Menüleiste. Sie brauchen den Router dafür nicht –

Antwort

0

Sie können gehen mit $state.go, aber das ist keine gute Praxis. Weil im Allgemeinen keine Beziehung zwischen dem Anzeigen einer Modal- und Zustandsänderung bestehen sollte. Das Anzeigen eines Modals sollte unabhängig von der Routenkonfiguration sein. Verwenden Sie einfach etwas wie addClass oder removeClass, um das Modal anzuzeigen, wenn Sie auf den Link oder die Schaltfläche klicken.

$scope.show = function(){ 
// open modal here by adding a class to the modal element 
} 

In gleicher Weise die modale schließen.

+0

WHERE stelle ich diese Show-Funktion? Wenn ein Benutzer auf ein Symbol klickt, wird in der Menüleiste das Modal angezeigt. –

+0

Dann schreiben Sie es in 'mainController', wenn es aus allen Zuständen sichtbar und anklickbar ist und wenn Sie diesen' mainController' schreiben möchten, sollte entweder der Eltern-Controller aller Controller sein oder unabhängige Mittel 'menuController'. –

+0

Ich entschied mich, in eine andere Richtung zu gehen. Ich habe das open.modal von der .state Funktion entfernt, weil es nicht wirklich ein Zustand ist. (Entschuldigung, ich lerne kantig und habe das nicht bemerkt). Ich fügte der Headervorlage ein Klickereignis hinzu und fügte allen Seiten eine offene modale Funktion hinzu. Es funktioniert jetzt wie erwartet. –