2016-11-24 5 views
9

Wenn ich ein Formular in einer Ansicht (Angular). Wenn der Benutzer versucht, sich von dort zu entfernen, und ich möchte, dass eine Bestätigungsmeldung angezeigt wird. Wie kann ich das machen?Angular: Verhindern Route Änderung, wenn Änderungen in der Ansicht vorgenommen

+3

Willkommen bei Stackoverflow verwendet wird. Eine Frage sollte den Code enthalten, der zeigt, was Sie versuchen zu erreichen, was Sie versucht haben und wo Sie versagt haben. SO ist keine Gemeinschaft von Code Affen ;-) –

Antwort

12

Sie können canDeactivate implementieren Typoskript wie

import {Injectable, Inject} from '@angular/core'; 
 
import { CanDeactivate } from '@angular/router'; 
 
import {ViewthatyouwantGuard} from './path to your view'; 
 

 
@Injectable() 
 
export class ConfirmDeactivateGuard implements CanDeactivate<ViewthatyouwantGuard> { 
 
    
 
    canDeactivate(target: ViewthatyouwantGuard) { 
 
     if (target.hasChanges) { 
 
      return window.confirm('Do you really want to cancel?'); 
 
     } 
 
     return true; 
 
    } 
 

 
} 
 

 
//hasChanges - function in 'ViewthatyouwantGuard' which will return true or false based on unsaved changes 
 

 
and in your routing file provide root like 
 

 
{path:'rootPath/', component: ViewthatyouwantGuard, canDeactivate:[ConfirmDeactivateGuard]},

+0

Genau das, wonach ich gesucht habe. Danke :) – Abraham

+0

@Abraham hat der obige Code funktioniert in Ordnung? – AngularM

3

CanDeactivate kann dafür verwendet werden. Sie müssen den Status an einen Dienst weitergeben, der für canDeactivate zugänglich ist.

Verwandte Themen