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 :

Créer une variable globale utilisable dans la console


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 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 sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    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.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "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

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

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

  3. #3
    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
    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 sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Je ne sais pas, tu récupères la valeur que tu souhaitais ?
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "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

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

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

  5. #5
    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
    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 ..

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2015
    Messages : 38
    Points : 126
    Points
    126
    Par défaut
    Tu peux déclarer une variable globale dans main.ts ;

    Du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    declare var global: any;
    et si simplement ta du mal a débuggé .

    Dans le debugger de chrome tu fais .
    ctrl+P tu cherche ton component,services,pipes,etc . tu met un breakpoint et tu utilise le this comme dans une classe

    l'extension chrome Augury marche relativement bien aussi

+ Répondre à la discussion
Cette discussion est résolue.

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 Format d'échange (XML, JSON...)
    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