小编Ank*_*ngh的帖子

如何从http.request()正确捕获异常?

我的部分代码:

import {Injectable} from 'angular2/core';
import {Http, Headers, Request, Response} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';

@Injectable()
export class myClass {

  constructor(protected http: Http) {}

  public myMethod() {
    let request = new Request({
      method: "GET",
      url: "http://my_url"
    });

    return this.http.request(request)
      .map(res => res.json())
      .catch(this.handleError); // Trouble line. 
                                // Without this line code works perfectly.
  }

  public handleError(error: Response) {
    console.error(error);
    return Observable.throw(error.json().error || 'Server error');
  }

}
Run Code Online (Sandbox Code Playgroud)

myMethod() 在浏览器的控制台中产生异常:

原始异常:TypeError:this.http.request(...).map(...).catch不是函数

http observable typescript angular

121
推荐指数
3
解决办法
21万
查看次数

Angular2:如何使用带有NgModel双向绑定的JavaScript Date Object

我正在使用Angular 2,我有这个代码:

JS,此代码启动模板的employee-variable:

handleEmployee(employee : Employee){
        this.employee = employee;
        this.employee.startDate = new Date('2005/01/01');
        console.log(this.employee);
    }
Run Code Online (Sandbox Code Playgroud)

模板:

...
<div>
    <label>Start date: </label>
    <input [(ngModel)]="employee.startDate" type="date" name="startDate"/>
  </div>
  <div>
...
Run Code Online (Sandbox Code Playgroud)

其他数据如firstname正确显示.但是到了我得到的日期:

mm/dd/yyyy
Run Code Online (Sandbox Code Playgroud)

在input元素中,应该是一个日期.

我怎样才能做到这一点?

javascript angular

53
推荐指数
3
解决办法
8万
查看次数

在Angular中深度复制对象

AngularJS必须angular.copy()深度复制对象和数组.

Angular也有类似的东西吗?

angular

49
推荐指数
6
解决办法
4万
查看次数

Angular 2 Final中的最小/最大验证器

根据thinkgram.io,目前支持的验证器是:

  • 需要
  • 使用MINLENGTH
  • 最长长度
  • 图案

所以,考虑下面的代码(这里是plunkr):

@Component({
  selector: 'my-app',
  template: `

  <form #formRef="ngForm">
    <input type="number" [(ngModel)]="firstValue" name="firstValue" min="0" required/>
    <input type="text" [(ngModel)]="secondValue" maxlength="5" name="secondValue" required/>
    <button type="submit"> Submit </button> 
  </form>

  FORM: {{formRef.form | json }}
`
})
export class AppComponent { 
  firstValue = -22;
  secondValue = "eyy macarena!"; 
}
Run Code Online (Sandbox Code Playgroud)

虽然minlength支持,但min="0"角度验证会忽略它:

在此输入图像描述

在此输入图像描述

因此,要在firstValue ngModel <0时使表单导致错误,我是否需要构建自定义验证器?

validation typescript angular2-forms angular

36
推荐指数
8
解决办法
10万
查看次数

从Observable获取当前值而无需订阅(只需要一次值)

标题说明了一切.如何在不订阅的情况下从Observable获取当前值?我只想要当前值一次而不是新值,因为它们正在进入......

observable rxjs angular

34
推荐指数
3
解决办法
3万
查看次数

Angular2:遇到异常/错误后,应用程序崩溃/无响应

如何告诉Angular在遇到异常时不阻止整个应用程序?

我不确定它是否可能,因为谷歌没有启发我.但它似乎对任何单页Web应用程序都至关重要.

Angular是快速的,但只要遇到异常并抛出错误,整个应用程序就会变得无法响应.

我知道在Javascript中

try {
  doSomething();
}
catch(err) {
  handleErrors(err);
}
Run Code Online (Sandbox Code Playgroud)

可能会解决问题.

但我只想知道是否有任何Angular特定解决方案或解决方法?

angular

28
推荐指数
2
解决办法
9658
查看次数

Angular2用ngClass做其他事情

我有以下模板:

<p [ngClass]="{checked: condition, unchecked: !condition}">
Run Code Online (Sandbox Code Playgroud)

虽然这是有效的,但我发现它有点难看,因为我必须重复两次条件.有没有办法像:( [ngClass]={condition ? checked : unchecked}这是行不通的)

谢谢

html ng-class angular

28
推荐指数
1
解决办法
4万
查看次数

如何在Angular2/4/5中实现自定义异步验证器

1.它甚至得到了Angular的支持吗?看到这个开放的问题

2.如果是的话,什么是错在下面的代码

export class someClass{

    myForm:ControlGroup;

    constructor(public http:Http, public formBuilder:FormBuilder)
       this.myForm = formBuilder.group({
            ImageId: ["", Validators.required, this.asynValidator]
    });

    asyncValidator(control: Control): {[key: string]: any} {

        return new Promise (resolve => {

          let headers = new Headers();
          headers.append('Content-Type', 'application/json');

          this.http.get('http://localhost/ImageIdValidate?id='+ control.value, {headers:headers})
                .map(res => res.json())
                .subscribe(data => {
                    console.log(data);
                    if(data != null) {
                        resolve({"duplicate": true})
                    }
                    else resolve(null);      
                })
            });
        });
      }
    }
Run Code Online (Sandbox Code Playgroud)

它甚至没有提出服务器请求.

typescript angular

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

Angular2 REST请求HTTP状态代码401更改为0

我正在开发一个Angular2应用程序.似乎当我的访问令牌到期时,401 HTTP状态代码在Response对象中变为值0.我收到401 Unauthorized但ERROR Response对象的状态为0.这阻止我捕获401错误并尝试刷新令牌.是什么导致401 HTTP状态代码被更改为HTTP状态代码0?

这是Firefox控制台的截图:

在此输入图像描述

这是我的代码:

get(url: string, options?: RequestOptionsArgs): Observable<any> 
{
    //console.log('GET REQUEST...', url);

    return super.get(url, options)
        .catch((err: Response): any =>
        {
            console.log('************* ERROR Response', err);

            if (err.status === 400 || err.status === 422)
            {
                return Observable.throw(err);
            }
            //NOT AUTHENTICATED
            else if (err.status === 401)
            {                   
                this.authConfig.DeleteToken();
                return Observable.throw(err);
            }               
            else
            {
                // this.errorService.notifyError(err);
                // return Observable.empty();
                return Observable.throw(err);
            }
        })
        // .retryWhen(error => error.delay(500))
        // .timeout(2000, new Error('delay exceeded'))
        .finally(() =>
        {
            //console.log('After the request...');
        });
} …
Run Code Online (Sandbox Code Playgroud)

rest cors angular

25
推荐指数
3
解决办法
2万
查看次数

Angular 2 animate*ng对于列表项,在RC 5中使用新的动画支持

我有一个组件从服务器获取项目列表,然后使用模板中的*ngFor显示该列表.

我希望列表显示一些动画,但一个接一个.我的意思是每个列表项应该在其他之后动画.

我正在尝试这样的事情:

import { Component, Input, trigger, state, animate, transition, style } from '@angular/core';

@Component({
    selector: 'list-item',
    template: ` <li  @flyInOut="'in'">{{item}}</li>`,
    animations: [
        trigger('flyInOut', [
            state('in', style({ transform: 'translateX(0)' })),
            transition('void => *', [
                style({ transform: 'translateX(-100%)' }),
                animate(100)
            ]),
            transition('* => void', [
                animate(100, style({ transform: 'translateX(100%)' }))
            ])
        ])
    ]
})
export class ListItemComponent {
    @Input() item: any;
}
Run Code Online (Sandbox Code Playgroud)

在我的列表组件模板中我使用它像:

<ul>
    <li *ngFor="let item of list;">
     <list-item [item]="item"></list-item>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

它的作用是立即显示整个列表.我希望项目一个接一个地输入一些动画.

typescript angular2-template angular2-services angular

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