IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

TypeScript Discussion :

Erreur création service TypeScript Angular


Sujet :

TypeScript

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 77
    Points : 42
    Points
    42
    Par défaut Erreur création service TypeScript Angular
    Bonjour, je suis débutante en TypeSript et Angular, et je souhaite réaliser un tchat.
    J'ai un composant 'chat-window' qui permet de créer une fenêtre de discussion. J'aimerai que l'utilisateur puisse avoir plusieurs fenêtres de discussion d'ouvertes. J'ai donc créé un service 'windowsService' afin de pouvoir créer plusieurs composants 'chat-window'.
    Hors, lorsque j'appelle mon service, cela me met une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    src/app/chat-threads/chat-threads.component.ts (71,39): Argument of type 'Window' is not assignable to parameter of type 'Window'.
      Property 'applicationCache' is missing in type 'Window'.
    Je n'arrive pas à comprendre pourquoi j'ai cette erreur ..

    Voici mon code: chat-threads.component.ts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    import {
      Component,
      OnInit,
      Inject
    } from '@angular/core';
    import * as _ from 'lodash';
    import { Observable } from 'rxjs';
    import { Thread } from '../thread/thread.model';
    import { ThreadsService } from '../thread/threads.service';
    import { Message } from '../message/message.model';
    import { MessagesService } from '../message/messages.service';
    import { WindowsService } from '../window/windows.service';
    import { Window } from '../window/window.model';
     
    @Component({
        selector: 'chat-threads',
        templateUrl: './chat-threads.component.html',
        styleUrls: ['./chat-threads.component.css'],
        providers: [WindowsService]
    })
    export class ChatThreadsComponent implements OnInit {
      unreadMessagesCount: number;
      threads: Observable<any>;
      currentWindow: Window;
      currentThread: Thread;
     
      constructor(public threadsService: ThreadsService,
                  public messagesService: MessagesService,
                  public windowsService: WindowsService) {
        this.threads = threadsService.orderedThreads;
      }
     
     
      ngOnInit(): void {
        this.messagesService.messages
            .combineLatest(
                this.threadsService.currentThread,
                (messages: Message[], currentThread: Thread) =>
                    [currentThread, messages] )
     
            .subscribe(([currentThread, messages]: [Thread, Message[]]) => {
              this.unreadMessagesCount =
                  _.reduce(
                      messages,
                      (sum: number, m: Message) => {
                        const messageIsInCurrentThread: boolean = m.thread &&
                            currentThread &&
                            (currentThread.id === m.thread.id);
                        if (m && !m.isRead && !messageIsInCurrentThread) {
                                sum++;
                        }
                        return (sum);
                      },
                      0);
            });
        this.windowsService.newWindows.subscribe((window: Window) => {
           this.currentWindow = window;
           });
      }
     
        onReduceChatThreads(): void {
            document.getElementById('chat-threads').classList.toggle('row-reduced');
        }
     
        onCreateChatWindow(): void{
            const w: Window = this.currentWindow;
            w.thread = this.currentThread;
            this.windowsService.addWindow(w);
     
            this.currentWindow = new Window();
        }
    }
    windows.service.ts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    import { Injectable } from '@angular/core';
    import { Subject, BehaviorSubject, Observable } from 'rxjs';
    import { User } from '../user/user.model';
    import { Thread } from '../thread/thread.model';
    import { Message } from '../message/message.model';
     
    import { MessagesService } from '../message/messages.service';
    import * as _ from 'lodash';
     
    @Injectable()
    export class WindowsService {
        newWindows: Subject<Window> = new Subject<Window>();
        create: Subject<Window> = new Subject<Window>();
     
        constructor() {
            this.newWindows
                .map((data: any) => data.json())
                .subscribe(this.create);
        }
     
        addWindow(window: Window): void {
            this.newWindows.next(window);
        }
    }
     
    export const windowsServiceInjectables: Array<any> = [
        WindowsService
    ];
    windows.model.ts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    import { uuid } from '../util/uuid';
    import { User } from '../user/user.model';
    import { Thread } from '../thread/thread.model';
    import { Message } from '../message/message.model';
     
    export class Window {
        id: string;
        thread: Thread;
     
        constructor(obj?: any) {
            this.id = obj && obj.id             || uuid();
            this.thread = obj && obj.thread     || null;
        }
    }
    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2017
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2017
    Messages : 81
    Points : 132
    Points
    132
    Par défaut
    bonjour, est-ce qu'il serait possible de voir la response du serveur? (via l'onglet network de ta console)

    Apparement, ton serveur renvoie un objet avec la propriété applicationCache.

    A partir de là tu as deux solutions :
    - tu enleves cette propriété dans l'envoi de data depuis ton serveur
    - tu as besoin de cette propriété et tu l'ajoutes dans ton Model Window

  3. #3
    Membre éclairé
    Avatar de Paleo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2013
    Messages : 242
    Points : 661
    Points
    661
    Par défaut
    Il existe une définition standard pour "Window", celle de l'objet "window" du DOM.

    Dans le fichier "windows.service.ts", il faut ajouter l'import du "Window" du projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import { Window } from '../window/window.model';
    Si cet import manque, alors c'est la définition standard du "Window" du DOM qui est utilisée. Donc la méthode "addWindow" attend l'objet Window du DOM. Ce qui explique pourquoi l'appel suivant échoue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.windowsService.addWindow(w);

Discussions similaires

  1. Erreur naming service CORBA
    Par inertia dans le forum CORBA
    Réponses: 5
    Dernier message: 26/06/2008, 02h39
  2. Erreur création dynamique de contrôle
    Par thierrybatlle dans le forum Access
    Réponses: 1
    Dernier message: 10/02/2006, 11h00
  3. [SOAP][Web Service] erreur création d'une référence Web
    Par Maximil ian dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 20/06/2005, 13h29
  4. [Firebird - D7] Erreur - Création dynamique d'une base
    Par EGI dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/03/2005, 14h26
  5. FOXPRO 2.6 : erreur créations du /des fichiers CAB
    Par breihtiti dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 16/11/2002, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo