typescript - Angular 5 + SignalR (DefinitelyTyped) - Nu se poate găsi numele '$'
Încerc să folosesc SignalR în aplicația mea Angular 5.
Am instalat aceste tipuri puternic de la DefinitelyTyped:
npm install --save @types/jquery
npm install --save @types/signalr
Typescript în packages.json arată versiunea 2.5.3.
Acum încerc să-l folosesc în felul acesta:
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();
}
}
Compilatorul se plânge cu următorul mesaj:
error TS2304: Cannot find name '$'.
...chiar dacă intellisense poate găsi $.hub:
Dacă încerc să adaug declare var $ :any; în fișierul meu, se compilează, dar primesc o altă eroare în consola browserului: $.hubConnection nu este o funcție.
Îmi scapă ceva?
Răspuns #1
Pentru a folosi SignalR în Angular trebuie să parcurgi acești pași:
Instalează pachetele jquery, signalr folosind npm:
npm install signalr
npm install jquery
Adaugă tipuri:
npm install --save @types/jquery
npm install --save @types/signalr
Adaugă scripturi în angular-cli.json
"apps": [{
"scripts": [
"../node_modules/jquery/dist/jquery.min.js",
"../node_modules/signalr/jquery.signalR.min.js"
],
}]
Și în serviciu trebuie să adăugați:
declare var $: any;
Exemplu simplu de cod 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);
});
}
}
