1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2017
    Messages : 30
    Points : 20
    Points
    20

    Par défaut Créer une variable globale utilisable dans la console

    Bonjour, malgré mes nombreuses recherches sur votre site et internet, je ne trouve pas ce que je recherche. Je veux créer une variable globale avec TypeScript et sous Angular 4, et ensuite pouvoir utiliser cette variable sur ma console.

    Je m'explique: j'ai créé une interface 'MyGlobal', où j'ai créé ma variable 'message_chat' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import {ChatService} from "./chat-service/chat.service";
     
    export interface MyGlobal {
     
      message_chat: ChatService;
     
    }
    Je souhaite initialiser cette variable dans mon service 'ChatService'. Je veux que cette variable prenne la valeur de 'this"':

    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
    import { Injectable } from '@angular/core';
    import { MyGlobal } from '../my-global';
     
    @Injectable()
    export class ChatService implements MyGlobal {
     
      message_chat: ChatService;
     
      constructor(public threadService: ThreadService,
                  public messageService: MessageService) {
        this.message_chat = this;
      }
    }
    Export const chatService Injectables: Array <any> = [
     ChatService
    ];
    Lorsque j'essaie d'utiliser cette variable dans ma console, j'ai cette erreur:

    Message_chat.openThread ()

    VM140: 1 Uncaught ReferenceError: message_chat n'est pas défini
    À <anonyme>: 1: 1
    Merci d'avance

  2. #2
    Expert éminent Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2005
    Messages
    2 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2005
    Messages : 2 460
    Points : 7 200
    Points
    7 200

    Par défaut

    C'est parce que ta variable appartient à l'instance du service ChatService qui appartient elle-même à l'injecteur correspondant.

    En AngularJS on peut accéder aux variables exposées par les services de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    angular.element(document.body).injector().get('serviceName');
    Tu dois pouvoir faire quelque chose d'équivalent avec Angular, reste à trouver la bonne commande

    Tips : En AngularJS il n'y a qu'un seul injector pour toute l'application. En Angular ce n'est plus le cas, il y a plusieurs injector (un par module de mémoire). Ça sera donc probablement moins facile à réaliser mais je vois pas pourquoi ça serait pas possible.

    Il faut également prendre en compte la transpilation du typescript vers le vanilla javascript.
    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

    Trust me, i'm an engineer !
    https://www.youtube.com/watch?v=rp8hvyjZWHs

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2017
    Messages : 30
    Points : 20
    Points
    20

    Par défaut

    Bonjour, j'ai trouvé une solution je pense assez similaire qui sert principalement à debugger.

    Il faut sélectionner le composant avec les dev tools de chrome, et ensuite taper ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ng.probe($0).componentInstance.nomService.__proto__.nomFonction()
    Penses-tu que cela est pareil ?

  4. #4
    Expert éminent Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2005
    Messages
    2 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2005
    Messages : 2 460
    Points : 7 200
    Points
    7 200

    Par défaut

    Je ne sais pas, tu récupères la valeur que tu souhaitais ?
    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

    Trust me, i'm an engineer !
    https://www.youtube.com/watch?v=rp8hvyjZWHs

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2017
    Messages : 30
    Points : 20
    Points
    20

    Par défaut

    Pas vraiment, certaines fonctions fonctionnent comme celle-ci car elles sont simples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    openSettings(): void {
        document.getElementById('outside').style.display = 'block';
        document.getElementById('chat-threads').classList.toggle('display-settings');
      }
    Mais d'autres fonctions ne fonctionnent pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    getThreadFromSubscription(threadId: string): Thread {
     
        let foundThread: Thread = null;
     
        this.threads.map((threadDictionary: { [key: string]: Thread }) => {
          for (let key in threadDictionary) {
            if (threadDictionary[key].id == threadId)
              foundThread = threadDictionary[key];
          }
        });
     
        return foundThread;
    }
    Cela me met ce ci comme erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Uncaught TypeError: Cannot read property 'map' of undefined
    J'ai l'impression qu'elle ne connait pas les variables que j'initialise dans mon projet ..

Discussions similaires

  1. [C#] Comment créer une variable globale?
    Par FraktaL dans le forum Windows Forms
    Réponses: 8
    Dernier message: 10/05/2017, 14h10
  2. [XL-2016] Utiliser une variable globale VBA dans la barre de formule
    Par Touffyman dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/03/2017, 00h36
  3. Réponses: 7
    Dernier message: 29/05/2013, 17h23
  4. Réponses: 8
    Dernier message: 06/02/2006, 16h38
  5. [JDOM] Créer une variable xml directement dans java
    Par Tigrounette dans le forum XML
    Réponses: 8
    Dernier message: 18/12/2005, 14h21

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