Javascript Angular 2在不应';T
这并不是说我不想更新视图,我只是不明白为什么它会在我期望它不会更新的时候更新它(因为对象是在NG之外更新的) 嗯 我有一个简单的代码:Javascript Angular 2在不应';T,javascript,angular,Javascript,Angular,这并不是说我不想更新视图,我只是不明白为什么它会在我期望它不会更新的时候更新它(因为对象是在NG之外更新的) 嗯 我有一个简单的代码: @Component({ selector: 'my-app', template: ` <div> <input type='button' value="Fill more" (click)="fillMore()"/> <ul> <li *ngFor="let i
@Component({
selector: 'my-app',
template: `
<div>
<input type='button' value="Fill more" (click)="fillMore()"/>
<ul>
<li *ngFor="let item of Items ">
{{item}}
</li>
</ul>
</div>
`,
})
export class App {
Items:Array<number> = new Array<number>();
constructor(private mySignalRService:MySignalRService)
{
this.Items.push(...[1,2,3]); //initial values
}
fillMore()
{
this.mySignalRService.go(this.Items);
}
}
@组件({
选择器:“我的应用程序”,
模板:`
-
{{item}}
`,
})
导出类应用程序{
项目:数组=新数组();
构造函数(私有mySignalRService:mySignalRService)
{
this.Items.push(…[1,2,3]);//初始值
}
菲尔莫尔()
{
this.mySignalRService.go(this.Items);
}
}
如您所见,我也在注入一项服务:
@Injectable()
export class MySignalRService
{
makeDummyDb:Promise<Array<number>>()
{
return new Promise( (v,x)=> {
setTimeout(function (){v([100,200,300]);},800);
})
}
go(arr : Array<number>) : number
{
this.makeDummyDb().then((newValues)=>arr.push(...newValues)) ;
return 5; //this method must return a number
}
}
@Injectable()
导出类MySignalRService
{
makeDummyDb:Promise如果您认为setTimeout或Promise将“在”区域之外,那就不是它的工作方式;Angular 2劫持setTimeout和setInterval(据我所知,在使用TypeScript时,querySelector返回的是什么,它是IE元素而不是HtmleElement,强制强制转换访问类似“样式”的内容),虽然这与分区没有任何关系,但只需指出在TS/Angular2中,有些事情可能会做一些不同的事情)。每次超时后,都会发生更改检测。据我所知,这就是设置值的原因,我认为所有内容都在区域内。你必须采取一些明确的措施来避免这种情况
解决这个问题的一个小例子:
ngZone.runOutsideAngular(() =>
Observable.interval(2500).subscribe(() => {
// async operation
});
如果你认为setTimeout或Promise将“在”区域之外,那就不是它的工作方式;Angular 2劫持setTimeout和setInterval(据我所知,在使用TypeScript时,querySelector返回的是什么,它是一个IE元素而不是HtmleElement,迫使强制转换访问“样式”之类的内容),虽然这与分区没有任何关系,但只需指出在TS/Angular2中,有些事情可能会做一些不同的事情)。每次超时后,都会发生更改检测。据我所知,这就是设置值的原因,我认为所有内容都在区域内。你必须采取一些明确的措施来避免这种情况
解决这个问题的一个小例子:
ngZone.runOutsideAngular(() =>
Observable.interval(2500).subscribe(() => {
// async operation
});
好的,那么我如何通过简单的测试方法来模拟一个“外部”区域呢?发布了一个变通方法的示例。你可以查看(有很多关于这个的文档,但是的,这可能有点棘手)好的,那么我如何通过简单的测试方法来模拟一个“外部”区域呢?发布了一个变通方法的示例。你可以查看(有很多关于这个的文档,但是是的,把它们放在一起可能有点棘手)看看这个,在zone.js之外运行一些东西看看这个,在zone.js之外运行一些东西