小编dc-*_*-p8的帖子

如何通过catchError()正确传播错误?

我写了一个可用的函数pipe:

HandleHttpBasicError<T>()
{
    return ((source:Observable<T>) => {
        return source.pipe(
            catchError((err:any) => {
                let msg = '';
                if(err && err instanceof HttpErrorResponse)
                {
                    if(err.status == 0)
                        msg += "The server didn't respond";
                }
                throw {
                    err,
                    msg
                } as CustomError
            })
        )

    })
}
Run Code Online (Sandbox Code Playgroud)

我可以在我的这个方式使用这个功能HttpService:

checkExist(id:string)
{
    return this.http.head<void>(environment.apiUrl + 'some_url/' + id)
        .pipe(
            HandleHttpBasicError(),
            catchError((err:CustomError) => {
                if(err.msg)
                    throw err.msg;
                if(err.err.status == HttpStatusCodes.NOT_FOUND)
                    throw("It doesn't exist.");
                throw(err);
            })

        )
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.当我订阅时checkExist(),我得到一个很好的错误消息,因为HandleHttpBasicError首先捕获一个错误并将catchError() …

rxjs angular-http rxjs6

15
推荐指数
1
解决办法
2万
查看次数

如何在mat-stepper中传递模板

我想这样做 :

<ng-template #content>
  <mat-step>step 1</mat-step>
  <mat-step>step 2</mat-step>
</ng-template>

<mat-horizontal-stepper>
  <ng-container *ngTemplateOutlet="content"></ng-container>
</mat-horizontal-stepper>
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误

错误错误:StaticInjectorError(AppModule)[MatStep - > MatStepper]:StaticInjectorError(平台:核心)[MatStep - > MatStepper]:NullInjectorError:没有MatStepper的提供者!

我认为这是因为mat-step在其构造函数中注入mat-stepper https://github.com/angular/material2/blob/master/src/lib/stepper/stepper.ts#L53

所以我尝试stepper用ngOutletContext 传递上下文

<mat-horizontal-stepper #ContainerStepper="matHorizontalStepper">
  <ng-container *ngTemplateOutlet="content" ngOutletContext="{$implicit:{stepper:ContainerStepper}}"></ng-container>
</mat-horizontal-stepper>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

任何的想法 ?

angular-material angular-material2 angular

10
推荐指数
1
解决办法
1360
查看次数

Angular6 + Cordova:未加载cordova

我知道这是一个常见问题,但所有找到的解决方法都是" 在index.html中包含cordova.js "或"更改href ="."到href ="./""

我认为应用程序中未加载cordova API,因为未调用deviceready回调.但我仍然可以运行应用程序(但使用navigagor.mediadevices的组件不起作用).

的index.html

<base href="./">
<script src=”cordova.js”></script>
<script>
window.isready = false;
function ready(){
    alert('test');
    console.log('test');
    window.isready = true; // this is always false
}
document.addEventListener('deviceready', ready, false);
</script>
Run Code Online (Sandbox Code Playgroud)

该事件从未被解雇

我如何安装cordova并构建应用程序

npm install -g cordova
cordova create cordova
cd cordova && cordova platforms add android
rm -rf cordova/www/*
ng build --prod --aot --output-path=cordova/www
cd cordova && cordova build android
Run Code Online (Sandbox Code Playgroud)

cordova的package.json

... 
"dependencies": {
    "cordova-android": "^7.0.0",
    "cordova-plugin-device": "^2.0.2",
    "cordova-plugin-file": "^6.0.1",
    "cordova-plugin-media-capture": "^3.0.2",
    "cordova-plugin-whitelist": "^1.3.3"
},
"cordova": { …
Run Code Online (Sandbox Code Playgroud)

cordova angular

1
推荐指数
1
解决办法
725
查看次数