Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.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
Typescript 角度2:从选择输入更改模型时应用程序冻结_Typescript_Angular - Fatal编程技术网

Typescript 角度2:从选择输入更改模型时应用程序冻结

Typescript 角度2:从选择输入更改模型时应用程序冻结,typescript,angular,Typescript,Angular,在我正在编写的Angular 2应用程序中,我有一个select元素,该元素通过[(ngModel)]绑定到控制器中的字段: DateInfo对象本身是一个简单的Typescript界面,只存储年份: export interface DateInfo { year: number } 我使用此接口的原因是将对year的更改传播到使用DateService的所有组件,如所示 由于某种原因,当从select元素更改模型时,整个应用程序将冻结(在Chrome和Edge中测试)。我用了一个例子来

在我正在编写的Angular 2应用程序中,我有一个
select
元素,该元素通过
[(ngModel)]
绑定到控制器中的字段:

DateInfo
对象本身是一个简单的Typescript界面,只存储年份:

export interface DateInfo {
  year: number
}
我使用此接口的原因是将对
year
的更改传播到使用
DateService
的所有组件,如所示

由于某种原因,当从
select
元素更改模型时,整个应用程序将冻结(在Chrome和Edge中测试)。我用了一个例子来说明这个问题


提前谢谢

该问题是由
getYearList()
为每个调用返回一个新的数组实例引起的。每次Angulars change detection运行时,它都会检测到一个变化,因为它每次都会得到一个新数组。 我想知道为什么你没有得到一个“自从上次检查以来,表情已经改变了”

缓存结果解决了这个问题


这就是为什么从模板调用方法通常是不好的做法。而是将方法调用的结果分配给属性并绑定到该属性。

对不起,如果我解释得不好,但我的目标是生成一个新年列表,每次“代码>年<代码>更改,使<代码>年<代码>位于列表的中间。
getYearList()
方法必须在每次更改
year
时返回一个新数组。我明白了,没有正确地关闭。
@Injectable()
export class DateService {
  public dateInfo: DateInfo = {
    year: 2016
  }
}
export interface DateInfo {
  year: number
}