angular 2 и stomp: не удается разрешить все параметры

#angular #stomp #sockjs

#angular #stomp #sockjs

Вопрос:

Я продолжаю сталкиваться с ошибками и видел, что

Ошибка: не удается разрешить все параметры для компонента данных

Я не знаю, как я могу его отладить, откуда он берется. Любая помощь или подсказка будут оценены.

Datacomponent.ts

 import { Component, OnInit, Inject } from '@angular/core';

import { Message, Client, Stomp } from 'stompjs';
import * as SockJS from 'sockjs-client';

@Component({
    selector: 'data',
    template: `
        <div id="raw">
            <h2>Messages</h2>
            <p>{{message}}</p>
        </div>
        `,
})
export class DataComponent implements OnInit, OnDestroy {
    constructor(private client : Client) { }

    mq_username = "guest";
    mq_password = "guest";
    mq_vhost    = "/";
    mq_url      = 'http://localhost:15674/stomp';
    mq_queue    = "/exchange/helloworld";

    public message: string;

     /** Callback on_connect to queue */
    public on_connect = () => {
        console.log('client', this.client);
        this.client.subscribe(this.mq_queue, function(message: Message) {
            this.message = message.body; 
        })
    }
    public on_connect_error(){
        console.log('connection failed');
    }

    ngOnInit() {
        this.client = Stomp.client(this.mq_url);
        this.client.connect(
            this.mq_username,
            this.mq_password,
            this.on_connect,
            this.on_connect_error,
            this.mq_vhost
        )
    }
}
  

В tsconfig.ts опции оба emitDecoratorMetadata и experimentalDecorators имеют значение true.

И в systemjs.config библиотеки включаются таким образом :

  System.config({
    paths: {
      'npm:': 'node_modules/'
    },
    map: {
      app: 'dist',

      // angular bundles
      [ANGULAR BUNDLES HERE]

      // other libraries
      'rxjs':                       'npm:rxjs',
      'sockjs-client': 'lib/sock-js/sockjs.min.js',
      'stompjs': 'node_modules/stompjs/lib/stomp.min.js',
    },
    [etc]
  

Ответ №1:

Похоже, что клиент не является сервисом angular 2.

Если это так, то вы не можете ввести его через конструктор.

Взгляните на это, в нем используется более ранняя версия angular 2, но она должна дать вам представление о том, как заставить ее работать.

Комментарии:

1. Я попытаюсь внедрить его как сервис, вернуться и обновить. Большое спасибо за подсказку.

2. При использовании этого примера я получаю сообщение об ошибке типа core.umd.js:3462 EXCEPTION: Uncaught (in promise): SyntaxError: Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. 'http' is not allowed. @Meireles Как я могу разрешить HTTP-схему?