我想更新我的应用程序视图,由服务中的事件触发。
我的一项服务注入了 ChangeDetectorRef。编译有效,但是当应用程序启动时我在浏览器中收到错误:No provider for ChangeDetectorRef!
.
我想我需要将它添加到我的 AppModule 中,但我找不到任何文档表明它在我可以在那里导入的模块中。我尝试将类本身添加到导入数组中,但这会导致错误。尝试将其添加到模块中的提供程序数组时,我也遇到了错误。这是我的服务的简化版本:
import {Injectable, ChangeDetectorRef } from '@angular/core';
@Injectable()
export class MyService {
private count: number = 0;
constructor(private ref: ChangeDetectorRef){}
increment() {
this.count++;
this.ref.detectChanges();
}
和应用程序模块:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { MyService } from './my.service';
@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent ],
providers: [ MyService ],
booststrap: [ AppComponent ]
})
export AppModule {}
更新
从那以后,我尝试删除对 ChangeDetectorRef 的使用,但我仍然遇到同样的问题。我猜我更新系统 JS 配置的方式有问题。
我最初使用 angular-cli 创建了应用程序,并试图自己更新 Angular,因为他们没有更新。随着 Angular 2.0.0 的最终发布,他们更新了 angular-cli 以使用最新版本的 angular。所以我将尝试使用他们的升级程序,希望会更好。
更新 2
webpack/angular-cli 更新进展顺利。我现在使用 Angular 2.0.0 和 angular-cli 1.0.0-beta14 构建应用程序。我仍然在浏览器中遇到同样的错误。我尝试从服务中删除ChangeDetectorRef,但实际上并没有。我有两个服务。如果我从这两个服务中删除它,那么我的应用程序加载正常,并且运行良好,除了我试图使用ChangeDetectorRef的地方。一旦我将它添加回其中一个文件,浏览器就会抱怨无法找到它的提供者。
我尝试在我的模块中导入它,但它不是模块,所以编译器抱怨。我尝试在我的模块中将它列为提供程序,但它没有提供属性,因此转译器会抱怨。如果我尝试将其放入声明数组中,则会出现类似问题。