相关疑难解决方法(0)

从服务触发组件视图的更新 - 没有ChangeDetectorRef的提供者

我想用udpate我的应用程序视图,由服务事件触发.

我的一个服务注入了ChangeDetectorRef.编译工作正常,但是当App被引导时,我在浏览器中出现错误:No provider for ChangeDetectorRef!.

我以为我需要将它添加到我的AppModule中,但我找不到任何表明它在我可以导入的模块中的文档.我尝试将类本身添加到导入数组,但这导致了错误.尝试将其添加到模块中的providers数组时,我也遇到错误.这是我的服务的简化版本:

import {Injectable, ChangeDetectorRef } from '@angular/core';

@Injectable()
export class MyService {
  private count: number = 0;
  constructor(private ref: ChangeDetectorRef){}

  increment() {
    this.count++;
    this.ref.detectChanges();
}
Run Code Online (Sandbox Code Playgroud)

和app模块:

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 {}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我已经尝试删除我对ChangeDetectorRef的使用,但我仍然遇到同样的问题.我猜我更新了我的System …

typescript angular2-changedetection angular

40
推荐指数
2
解决办法
2万
查看次数

为什么 Angular 无法检测到 Android 上的属性更改?

我有一个非常基本的 Ionic Android 应用程序,使用 firebase 身份验证。当用户输入错误的凭据并且我发现错误时,我只需更改反应性属性即可向用户显示错误:

  async login() {
    try {
      await this.authService.login(this.email, this.password);
      this.error = "";
    } catch (error) {
      this.error = error;
    }
  }
Run Code Online (Sandbox Code Playgroud)

单击登录按钮时会调用此函数,authService 中的函数登录如下所示:

  login(email: string, password: string) {
    return this.afAuth.signInWithEmailAndPassword(email, password);
  }
Run Code Online (Sandbox Code Playgroud)

在我的登录 html 页面中,我尝试显示如下错误:

  <p>
    <ion-text color="danger"><i>{{error}}</i></ion-text>
  </p>
Run Code Online (Sandbox Code Playgroud)

一切都是基本的,没有什么花哨的,如果我通过 运行应用程序,一切都可以在浏览器中完美运行ionic serve,但运行应用程序后,它在 Android 设备上的运行情况就不一样了ionic cordova run android

如果凭据错误,错误会被很好地捕获,但不会显示在界面上,除非我单击输入然后显示错误。我相信 Angular 不会检测更改,并且通过使用此处ChangeDetectorRef解决方案中的描述,它可以工作。

但我发现这是解决这个错误的一种很奇怪的方法。为什么角度无法检测到变化本身?为什么它可以在浏览器上运行但不能在移动设备上运行?

我检查过许多其他类似的问题,但没有人发现它可以在浏览器上运行但不能在 Android 设备上运行。

android firebase ionic-framework firebase-authentication angular

5
推荐指数
0
解决办法
367
查看次数