我的部分代码:
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不是函数
我正在使用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元素中,应该是一个日期.
我怎样才能做到这一点?
根据thinkgram.io,目前支持的验证器是:
所以,考虑下面的代码(这里是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时使表单导致错误,我是否需要构建自定义验证器?
标题说明了一切.如何在不订阅的情况下从Observable获取当前值?我只想要当前值一次而不是新值,因为它们正在进入......
如何告诉Angular在遇到异常时不阻止整个应用程序?
我不确定它是否可能,因为谷歌没有启发我.但它似乎对任何单页Web应用程序都至关重要.
Angular是快速的,但只要遇到异常并抛出错误,整个应用程序就会变得无法响应.
我知道在Javascript中
try {
doSomething();
}
catch(err) {
handleErrors(err);
}
Run Code Online (Sandbox Code Playgroud)
可能会解决问题.
但我只想知道是否有任何Angular特定解决方案或解决方法?
我有以下模板:
<p [ngClass]="{checked: condition, unchecked: !condition}">
Run Code Online (Sandbox Code Playgroud)
虽然这是有效的,但我发现它有点难看,因为我必须重复两次条件.有没有办法像:( [ngClass]={condition ? checked : unchecked}
这是行不通的)
谢谢
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)
它甚至没有提出服务器请求.
我正在开发一个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) 我有一个组件从服务器获取项目列表,然后使用模板中的*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)
它的作用是立即显示整个列表.我希望项目一个接一个地输入一些动画.
angular ×10
typescript ×4
observable ×2
cors ×1
html ×1
http ×1
javascript ×1
ng-class ×1
rest ×1
rxjs ×1
validation ×1