类型'boolean'不可分配给类型'ObservableInput <{}>'

时间:2018-07-27 09:10:45

标签: angular rxjs angular-observable

我正在从事Angle 6项目。我正在为我的routeGuards使用canDeactivate和一个弹出以显示路线离开消息。但是问题出在悬停.flatMap(isAllow)=> {

错误:类型'(isAllow:布尔值)=>布尔值'的参数不能分配给类型'(值:布尔值,索引:数字)=> ObservableInput <{}>'的参数。 strong>

我想在price-list-guard.service.ts中执行以下操作:

  

price-list-guard.service.ts

@Injectable()
export class PriceListFormGuard implements CanDeactivate<PriceListFormComponent> {
    constructor(private promptService: PromptService) { }

    canDeactivate(component: PriceListFormComponent):boolean {
        if (component.isDirty) {
            this.promptService.showPrompt('Warning', 'Unsaved changes detectect on the current page);
            this.promptService.callback.flatMap((isAllow) => {
                if (isAllow) {
                    return true;
                } else {
                    return false;
                }
            });
        }
    }
}
  

prompt-service.ts

@Injectable()
export class PromptService {
    title: string;
    message: string;
    display = 'none';
    callback: Subject<boolean>;

    constructor() {
        this.callback = new Subject<boolean>();
    }

    showPrompt(title: string, message: string): void {
        this.title = title;
        this.message = message;
        this.display = 'block';
    }

    close(confirm?: boolean): void {
        this.title = null;
        this.message = null;
        this.display = 'none';
        if (confirm != null) {
            this.callback.next(confirm);
        }
    }

2 个答案:

答案 0 :(得分:0)

您的canDeactivate方法的返回类型为布尔值。但是该方法看起来没有任何回报。因此,请尝试以下方法代替您的方法

canDeactivate(component: PriceListFormComponent):boolean {
        // let retVal: boolean = true;
        if (component.isDirty) {
            this.promptService.showPrompt('Warning', 'Unsaved changes detectect on the current page);
           return this.promptService.callback.flatMap((isAllow) => {
                if (isAllow) {
                    return true;
                } else {
                    return false;
                }
            });
        }
     return false;
    }

答案 1 :(得分:0)

使用异步操作时,您不能返回布尔值。

更改为此:

canDeactivate(component: PriceListFormComponent):Observable<boolean> { // Return an observable
    if (component.isDirty) {
        this.promptService.showPrompt('Warning', 'Unsaved changes detectect on the 
        current page);
        return this.promptService.callback.asObservable();
    } else {
        return of(true);
    }
}