1. #1
    Membre averti

    Profil pro
    Inscrit en
    août 2008
    Messages
    892
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 892
    Points : 409
    Points
    409

    Par défaut Comment modifier un attribut ?

    Bonjour j'ai un modèle comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    export class Sommaire{
     
        id:number;
        name:string;
     
        static matieres:Sommaire[] = [
            { id:1, name: 'Informatique' },
            { id:2, name: 'Electronique' },
            { id:3, name: 'Infographie' },  
            ];
    }

    j'ai un formulaire sous angular2, et je souhaite éditer un sommaire,

    voici la classe qui va modifier l'une des métières que j'aurais sélectionner:

    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
     
    import {Component,Output,EventEmitter} from '@angular/core';
    import {Sommaire} from './sommaire-data';
    import {SommaireGestionService} from './sommaire-gestion';
     
    @Component({
        selector: 'edit-matiere',
        templateUrl: './app/sommaire/sommaire-edit.template.html',
    })
     
    export class EditMatiereComponent {
     
        public matiereAediter:Sommaire;//une seul matiere à editer ou afficher
     
        @Output() onEdit = new EventEmitter();
        @Output() onLst = new EventEmitter();
     
        constructor(private sommaireService:SommaireGestionService){
           this.matiereAediter = this.sommaireService.getMatierNow();
        }
     
        annuler(){
                this.onLst.emit(null);
        }
     
        modifierMatiere(matiere:string){ //après avoir modifier son nom
            console.log(matiere);
            console.log(this.matiereAediter.id);
            this.matiereAediter.name = matiere;
            console.log(this.matiereAediter+" =fin ");
            this.onEdit.emit(null);
        }
    }
    lorsque j'active un bouton qui appel la méthode modifierMatiere(matiere:string), j'ai cette chaine que je souhaite la modifier directement mon modèle "Sommaire".
    Mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            console.log(this.matiereAediter+" =fin ");
    me donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Electronique88 sommaire-edit.component.js:24:9
    2 sommaire-edit.component.js:25:9
    [object Object] =fin
    ici matiereAediter est vide ? comment on précède pour réinjecter le nom modifier ?

    merci de vos réponse

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    11 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 11 952
    Points : 25 538
    Points
    25 538

    Par défaut

    Bonjour,
    pour voir ce que contient ton objet il ne te faut pas faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(this.matiereAediter+" =fin ");
    mais plutôt un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(this.matiereAediter, " =fin ");

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : septembre 2013
    Messages : 205
    Points : 577
    Points
    577

    Par défaut

    Bonjour, une remarque concernant ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    export class Sommaire{
     
        id:number;
        name:string;
     
        static matieres:Sommaire[] = [
            { id:1, name: 'Informatique' },
            { id:2, name: 'Electronique' },
            { id:3, name: 'Infographie' },  
            ];
    }
    Il n'est pas correct, même s'il compile et fonctionne, car les items dans le tableau ne sont pas des instances de la classe "Sommaire".

    Il faudrait faire (avec une interface) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    export interface Matiere {
        id: number
        name: string
    }
     
    export let matieres: Matiere[] = [
        { id: 1, name: 'Informatique' },
        { id: 2, name: 'Electronique' },
        { id: 3, name: 'Infographie' }
    ];
    Ou bien avec une classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    export class Sommaire {
        constructor(public id: number, public name: string) {
        } 
        static matieres = [
            new Sommaire(1, 'Informatique'),
            new Sommaire(2, 'Electronique'),
            new Sommaire(3, 'Infographie')
        ];
    }

  4. #4
    Membre émérite
    Profil pro
    Développeur
    Inscrit en
    mars 2012
    Messages
    1 435
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mars 2012
    Messages : 1 435
    Points : 2 374
    Points
    2 374

    Par défaut

    Perso, tout définir en Static n'est pas une bonne chose car ça reste en mémoire, à moins qu'il y ait un mécanisme de cache.
    Si la réponse vous a aidé, pensez à cliquer sur +1

  5. #5
    Membre confirmé
    Avatar de Paleo
    Homme Profil pro
    Développeur Web
    Inscrit en
    septembre 2013
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : septembre 2013
    Messages : 205
    Points : 577
    Points
    577

    Par défaut

    Dans tous les cas, ce qui est exporté reste en mémoire.

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    août 2008
    Messages
    892
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 892
    Points : 409
    Points
    409

    Par défaut

    merci pour ces conseils

    j'ai prix exemple sur un tuto pour les attibuts statique.

    Je ne trouve pas et je n'arrive pas à faire la démonstration d'une hydratation de cette objet Sommaire (je suppose que c'est la méthode map() de rxjs)?

    peut t'on passer du format JSON en objet facilement?

    j'aimerais comprendre et savoir quel est la bonne facon d'hydrater un modèle d'objet depuis un json ?

    par exemple je reçois depuis un webservice du json,

    avant d'être exploiter on va récupérer les data et les hydrater soit les charger dans

    leur attribut de l'objet à hydrater.

    si vous avez des exmples de démonstration en Typescript?

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/08/2009, 09h50
  2. Réponses: 12
    Dernier message: 12/01/2009, 17h55
  3. Réponses: 3
    Dernier message: 13/07/2008, 15h16
  4. Réponses: 6
    Dernier message: 30/10/2007, 16h04
  5. comment modifier les attributs d'un fichier?
    Par kamal101 dans le forum C++
    Réponses: 1
    Dernier message: 18/03/2005, 15h16

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