Return Observable in canDeactivate not working

前端 未结 3 1533
旧巷少年郎
旧巷少年郎 2020-12-18 02:59

I have a confirm/cancel modal dialog that pops up when a user leaves a route. I do this by using a guard with the canDeactivate method. However I want canDeactivate to wait

3条回答
  •  攒了一身酷
    2020-12-18 03:31

    Just putting this here in case someone in future is as careless as me:

    If your component has a function hasUnsavedChanges() your canDeactivate() method would need to return !hasUnsavedChanges().

    But then if you start using an observable for hasUnsavedChanges, you'll be returning !hasUnsavedChanges$ which will just be a falsey value.

    If you need to support both you can do this:

    canDeactivate(component: C)
    {
        var hasUnsavedChanges = component.hasUnsavedChanges();
    
        if (typeof (hasUnsavedChanges) === 'boolean')
        {
            return !hasUnsavedChanges;
        }
        else
        {
            return hasUnsavedChanges.map(x => !x);
        }
    }
    

提交回复
热议问题