Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular 2在不应';T_Javascript_Angular - Fatal编程技术网

Javascript Angular 2在不应';T

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

这并不是说我不想更新视图,我只是不明白为什么它会在我期望它不会更新的时候更新它(因为对象是在NG之外更新的)

我有一个简单的代码:

@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之外运行一些东西