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

AngularJS Discussion :

Créer une variable utilisable dans un service


Sujet :

AngularJS

  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 utilisable dans un service
    Bonjour, tout d'abord je débute en Angular, RxJS, TS. Je cherche à utiliser une variable dans mon service, mais celle-ci a été crée dans mon modèle.
    Je m'explique.
    J'ai un BoxService qui est composé d'un modèle 'box.model.ts' composé de 3 paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    export class Box {
        id: string;
        thread: Thread;
        discussion: Observable<Message[]>;
     
        constructor(id?: string,
                    thread?: Thread,
                    discussion?: Observable<Message[]>) {
            this.id = id || uuid();
            this.thread = thread || null;
            this.discussion = discussion || null;
        }
    }
    et d'un 'box.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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    @Injectable()
    export class BoxService {
     
        windows: Box[];
     
        currentBox: Subject<Box> =
            new BehaviorSubject<Box>(new Box());
     
        currentBoxMessages: Observable<Message[]>;
     
        constructor(public messagesService: MessagesService) {
            this.windows = [
            ];
     
            this.currentBoxMessages = this.currentBox
                .combineLatest(messagesService.messages,
                    (currentBox: Box, messages: Message[]) => {
                        if (currentBox && messages.length > 0) {
                            return _.chain(messages)
                                .filter( (message: Message) =>
                                    (message.thread.id === currentBox.id))
                                .map( (message: Message) => {
                                    message.isRead = true;
                                    return message; })
                                .value();
                        } else {
                            return [];
                        }
                    });
        };
     
        addChatWindow(id?: string, thread?: Thread): Box {
            const newBox: Box = new Box(id, thread);
            this.windows.push(newBox);
            return newBox;
        }
     
        setCurrentBox(newBox?: Box): void {
            this.currentBox.next(newBox);
        }
    }
     
    export const boxsServiceInjectables: Array<any> = [
        BoxService
    ];
    Je cherche à avoir la variable 'this.box.discussion' égale à la variable 'this.currentBoxMessages'.

    Est ce que cela est possible ?

    Merci d'avance car je sèche vraiment ..

  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
    Commences déjà par refactorer ton code pour qu'il n'exécute pas tout ce fatra dans ton constructeur, c'est un anti-pattern.

    Ton problème part de là, mauvais design, mauvaises pratiques et donc résultats bizarres et incompréhensibles.
    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, merci pour ta réponse. Je ne connaissais pas les anti-pattern, ton site m'en a appris pa smal sur la syntaxe de mon code.

    J'ai donc essayé de refactorer mon code même si je ne vois pas trop comment faire ..

    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
     
    @Injectable()
    export class BoxService {
     
        windows: Box[];
     
        currentBox: Subject<Box> =
            new BehaviorSubject<Box>(new Box());
     
        currentBoxMessages: Observable<Message[]>;
     
        constructor(public messagesService: MessagesService) {
            this.windows = [
            ];
     
            this.currentBoxMessages = this.currentBox
                .combineLatest(messagesService.messages,
                    (currentBox: Box, messages: Message[]) => {
                        if (currentBox && messages.length > 0) {
                            return _.chain(messages)
                                .filter( (message: Message) =>
                                    (message.thread.id === currentBox.id))
                               .value();
                        }
                    });
        };
     
        addChatWindow(id?: string, thread?: Thread): Box {
            const newBox: Box = new Box(id, thread);
            this.windows.push(newBox);
            return newBox;
        }
     
        setCurrentBox(newBox?: Box): void {
            this.currentBox.next(newBox);
        }
    }
     
    export const boxsServiceInjectables: Array<any> = [
        BoxService
    ];
    Mais ensuite je ne vois toujours pas comment instancier ma variable 'discussion' pour qu'elle prenne la valeur de la variable 'currentBoxMessages'

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/02/2012, 14h37
  2. Réponses: 4
    Dernier message: 16/05/2010, 18h53
  3. [SP-2007] Créer une fonction utilisable dans les champs calculés
    Par lolomoss dans le forum SharePoint
    Réponses: 4
    Dernier message: 25/06/2009, 08h49
  4. Réponses: 1
    Dernier message: 12/04/2009, 17h54
  5. Réponses: 2
    Dernier message: 02/02/2009, 12h09

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