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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    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
    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 confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    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.

  3. #3
    Membre actif
    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
    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