首页 > 解决方案 > 尝试访问我的服务中的功能时出错

问题描述

我正在尝试使用一些 socket.io 以角度实现 Web 应用程序。我用ngx-socket-io.

我有这样的服务:

import { Socket } from 'ngx-socket-io';
import { Injectable } from '@angular/core';
import { map } from 'rxjs/operators';


@Injectable()
export class IoRequestService {
  constructor(private socket: Socket) { }
  
  sendMessage(msg: string) {
    this.socket.emit("message", msg);
  }

  getMessage() {
        return this.socket
            .fromEvent("message")
            .pipe(map((data:any) => data.msg));
   }
}

然后我尝试在这样的组件中使用它

import { Component, OnInit } from '@angular/core';
import { Transaction } from '../models/Transaction.model'
import { IoRequestService } from '../services/ioRequest.service'

@Component({
  selector: 'app-transactions',
  templateUrl: './transactions.component.html',
  styleUrls: ['./transactions.component.scss']
})
export class TransactionsComponent implements OnInit {
  transactions: Transaction[] = [];
  constructor() { }

  ngOnInit(): void {
  }

  send() {
    IoRequestService.sendMessage("txt");
  }

}

但我有一个错误:

Property 'sendMessage' does not exist on type 'typeof IoRequestService'.

你知道为什么会这样吗?

标签: angularsocket.io

解决方案


由于IoRequestService带有注释,因此@Injectable()您需要在组件中注入其实例

constructor(private service: IoRequestService) {
}

send() {
  this.service.sendMessage("txt");
}

还添加IoRequestService您的AppModule

@NgModule({
  ...
  providers: [
    IoRequestService
  ]
  ...
})
export class AppModule {
}

推荐阅读