Использование AlarmService Бросает разные ошибки в угловой 6 TypeScript - PullRequest
0 голосов
/ 27 августа 2018

У меня возникла проблема с разрешением этой ошибки. Когда я добавляю Alarmservice, я всегда получаю эту ошибку.

Когда я проверил эту ошибку в Google, каждый говорит, что я должен добавить это в провайдере, если я добавляю в провайдера, он также не работает, и я получаю другую ошибку

import { Component, Input } from '@angular/core';
import { Client, BasicAuth, AlarmService } from '@c8y/client';
import { CumulocityService } from './c8y.service';
import {
  Router
} from '@angular/router';
@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent {
  @Input() name: string;
  model = {
    user: '',
    password: '',
    tenant: ''
  };
  error = {
    shown: false,
    msg: ''
  };
  disabled = false;
  basicAuth: string = 'https://tempar.adamos.com'
  currentUser: object = {};
  constructor(
    private cumulocity: CumulocityService,
    private alarmService: AlarmService,
    private route: Router
  ) { }

  async login() {
    this.disabled = true;
    const client = new Client(new BasicAuth(
      {
        user: this.model.user,
        password: this.model.password,
        tenant: this.model.tenant
      }),
      this.basicAuth
    );

    sessionStorage.setItem("client", JSON.stringify(client));

    client.inventory.list$().subscribe((data) => {
      // request all inventory data via fetch and adds realtime if data changes
      console.log(data);
    });
    try {
      let user = await client.user.current();
      debugger;
      this.cumulocity.client = client;
      console.log(user.data);
      const alarmId: number = 63704;
      const { data, res } = await this.alarmService.detail(alarmId);

      console.log(data, res);

      //  this.route.navigate(['/dashboard']);
    } catch (ex) {
      this.cumulocity.client = null;
      this.error.shown = true;
      this.error.msg = ex.message;
    } finally {
      this.disabled = false;
    }
  }
}



core.js:1673 ERROR Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[LoginComponent -> AlarmService]: 
  StaticInjectorError(Platform: core)[LoginComponent -> AlarmService]: 
    NullInjectorError: No provider for AlarmService!
Error: StaticInjectorError(AppModule)[LoginComponent -> AlarmService]: 
  StaticInjectorError(Platform: core)[LoginComponent -> AlarmService]: 
    NullInjectorError: No provider for AlarmService!
    at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:1062)
    at resolveToken (core.js:1300)
    at tryResolveToken (core.js:1244)
    at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1141)
    at resolveToken (core.js:1300)
    at tryResolveToken (core.js:1244)
    at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1141)
    at resolveNgModuleDep (core.js:8376)
    at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:9064)
    at resolveDep (core.js:9429)
    at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:1062)
    at resolveToken (core.js:1300)
    at tryResolveToken (core.js:1244)
    at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1141)
    at resolveToken (core.js:1300)
    at tryResolveToken (core.js:1244)
    at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js:1141)
    at resolveNgModuleDep (core.js:8376)
    at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:9064)
    at resolveDep (core.js:9429)
    at resolvePromise (zone.js:814)
    at resolvePromise (zone.js:771)
    at zone.js:873
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:3815)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
    at drainMicroTaskQueue (zone.js:595)

Если я добавлю Alarmservice в app.module.ts, я получу другую ошибку, как сказано выше

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppRoutingModule }     from './app-routing.module';
import { AppComponent } from './app.component';
import { LoginComponent } from './login/login.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { CumulocityService } from './login/c8y.service';
import {  AlarmService } from '@c8y/client';

@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    DashboardComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule
  ],
  providers: [ AlarmService, CumulocityService],
  bootstrap: [AppComponent]
})
export class AppModule { }

ERROR

Uncaught Error: Can't resolve all parameters for AlarmService: (?, ?).
        at syntaxError (compiler.js:1016)
        at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getDependenciesMetadata (compiler.js:10917)
        at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getTypeMetadata (compiler.js:10810)
        at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getInjectableTypeMetadata (compiler.js:11032)
        at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver.getProviderMetadata (compiler.js:11041)
        at compiler.js:10979
        at Array.forEach (<anonymous>)
        at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver._getProvidersMetadata (compiler.js:10939)
        at CompileMetadataResolver.push../node_modules/@angular/compiler/fesm5/compiler.js.CompileMetadataResolver.getNgModuleMetadata (compiler.js:10658)
        at JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler._loadModules (compiler.js:23858)

1 Ответ

0 голосов
/ 28 августа 2018

Вы видели пример stackblitz ? Я думаю, у вас есть, потому что это выглядит как код оттуда.

В данный момент вы не можете напрямую вводить сервисы в angular. Вы можете просто написать обертку вокруг клиента (как сделано в примере)

Итак, чтобы ваш код работал:

  1. удалить импорт AlarmService
  2. Запрос тревоги через this.client.alarm.detail(alarmId); вместо AlarmService.

this.client.alarm имеет тип AlarmService и использует имя входа, которое вы установили с помощью new Client(new BasicAuth([...]));.

В будущем вы можете использовать @ c8y / ngx-data для правильного внедрения зависимостей, но оно не выпущено как стабильное, и поэтому я бы не советовал его использовать.

...