【问题标题】:Angular 5 + SignalR (DefinitelyTyped) - Cannot find name '$'Angular 5 + SignalR (DefinitelyTyped) - 找不到名称'$'
【发布时间】:2017-11-24 14:08:11
【问题描述】:

我正在尝试在我的 Angular 5 应用程序中使用 SignalR

我从 DefinitelyTyped 安装了这些强类型:

npm install --save @types/jquery
npm install --save @types/signalr

我的packages.json 中的打字稿显示版本 2.5.3

现在我尝试这样使用它:

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

@Injectable()
export class SignalRService {

    constructor() {}

    public ConnectTo(url: string): void {

        var hubConnection = $.hubConnection();
        var hubProxy = hubConnection.createHubProxy('DashboardHub');
        hubProxy.on('Example', (e: any) => {
            console.log('worked');
        });

        hubConnection.start();
    }
}

编译器报错如下:

error TS2304: Cannot find name '$'.

...虽然智能感知可以找到$.hub:


如果我尝试将declare var $ :any; 添加到我的文件中,它会编译,但在浏览器的控制台中出现另一个错误:$.hubConnection is not a function

我错过了什么吗?

【问题讨论】:

  • 你还没有声明 $ :reference to another thread
  • @JanSomersJanS91 我认为这是一种较旧的方法,而DefinitelyTypes 将使这不再是必需的。无论如何,如果我添加它,我会得到$.hubConnection is not a function
  • 嗯,奇怪,这不起作用……也许你可以试试this
  • @JanSomersJanS91 我尝试了npm install jquery --save 并将其添加到angular-cli.json,仍然是$.hubConnection is not a function

标签: angular typescript npm signalr


【解决方案1】:

要在 Angular 中使用 SignalR,您需要执行以下步骤:

使用 npm 安装 jquery、signalr 包:

npm install signalr
npm install jquery

添加类型:

npm install --save @types/jquery 
npm install --save @types/signalr

将脚本添加到 angular-cli.json

"apps": [{
    "scripts": [
        "../node_modules/jquery/dist/jquery.min.js",
        "../node_modules/signalr/jquery.signalR.min.js"
    ],
}]

在服务中你需要添加:

declare var $: any;

简单的 Angular 代码示例:

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

declare var $: any;
@Injectable()
export class SignalrService {
    private connection: any;
    private proxy: any;
    private ulr: any;

    constructor() {}

    public startConnection(): void {
        this.connection = $.hubConnection(this.url);
        this.proxy = this.connection.createHubProxy('ProcessingHub');

        this.connection.start().done((data: any) => {
            console.log('Connected to Processing Hub');
            this.sendMessage();
        }).catch((error: any) => {
            console.log('Hub error -> ' + error);
        });
    }

    public sendMessage(): void {
        this.proxy.invoke('SendMessage', 'test')
           .catch((error: any) => {
               console.log('SendMessage error -> ' + error); 
            });
    }
}

【讨论】:

  • 看来我只是忘了更改angular-cli.json。我什至不必安装类型,只需安装 jquery 和 signalr 就足够了。
猜你喜欢
  • 2016-01-24
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 2021-05-01
  • 2018-03-30
  • 1970-01-01
相关资源
最近更新 更多