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

Angular Discussion :

[Angular5] accès au propriété parent


Sujet :

Angular

  1. #1
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut [Angular5] accès au propriété parent
    Bonjour à tous,

    Je fait des tests unitaires sur un composant. sur TypeScript et Jasmine
    Seulement je doit setter la valeur de la classe parent ce que n'arrive pas a faire.

    voici mon code de la classe enfant :

    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 MyChildComponent extends MyParentComponent {
     
        .........
         myFunnyFuntion() {
             console.log('here I need to set my value this.propertyParent', this.propertyParent);
             // in the test I setted propertyParent to false but it still to 'true' in here !!??
             if(this.propertyParent === false)
              {
                  dosometing..
              }
          }
    }
    et ma classe parent:

    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
     
    .....
    export class MyParentComponent {
     
       ......
       protected propertyParent: boolean = true;
       ......
        get propertyParent(): boolean {
           return this.propertyParent;
        }
     
        set propertyParent(value: boolean) {
            this.propertyParent = value;
        }
    }
    et pour les tests unitaire je fait:

    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
     
    describe('Component tests', () => {
       let fixture: ComponentFixture<MyChildComponent>;
       let component: MyChildComponent;
       beforeEach(() => {
            ....... 
            // initiate child component
            fixture = TestBed.createComponent(MyChildComponent);
            component = fixture.componentInstance;
       }
       it('should be set the value propertyParent', () => {
           spyOn(component, 'propertyParent'); 
           // here I want to access to propertyParent, by default is setted to true
           component.propertyParent = false;
           // !!!!  the test is passing, 
           expect(component.propertyParent).toBe(false);
           // but my expectation is to enter into the condition in ChildComponent. never enter in it
           component.myFunnyFunction();
           fixture.detectChanges();
     
    }

  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
    On peut voir le code des constructeurs ?

    A mon avis tu devrais utiliser super.props au lieu de this.props dans ta classe enfante.

    Sinon d'un point de vue conceptuel, hériter des composants en Angular c'est à peu près comme hériter des scopes en AngularJS, c'est très dangereux.
    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 régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut Raison des risques ?
    Merci pour ta réaction.

    Si c'est très dangereux comme tu dis.
    Quel sont les risques ou soucis qui peuvent apparaître ?

    Un petit exemple plus complet et en accord avec ce que je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    export abstract class ParentComponent { 
       protected propertyParent = true;
       constructor(propertyParent){
         this.propertyParent = propertyParent;
       }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    export class ChildComponent extends ParentComponent{
        constructor(propertyParent){
            super(propertyParent);
        }
    }
    Dans mon projet j'utilise des composants générique de classe abstraite
    Pour créer des éléments html comme:
    - des input autocomplete
    - des input pour les mot de passe
    ...

    Et ensuite un formulaire qui instancie mes composant enfants

  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
    Est-ce que ça serait pas le spyOn qui interfère ?

    Je n'en vois pas l'utilité pour ton test d'ailleurs. Un spy c'est pour savoir si une fonction a été appelée (via toHaveBeenCalled et toHaveBeenCalledWith).

    Autre question, quelle est la valeur de propertyParent à l'exécution ? Tu fais un test strict sur false, donc que la valeur soit true ou undefined tu ne passes pas dans ton block. Or selon la valeur ce n'est probablement pas le même problème.

    Pour l'héritage je ne vois pas tellement à quoi pourrait correspondre un composant d'IHM abstrait.

    D'une manière plus générale cette vidéo devrait bien introduire le problème entre composition et héritage :

    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 régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut super!
    Merci pour le partage..!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/11/2017, 14h09
  2. [POO] Accès à la propriété d'un parent
    Par adrien357 dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2007, 12h12
  3. Interdire l'accès au propriétés de l'affichage
    Par ET_UHP dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 09/12/2005, 12h02
  4. [Problème] Accès aux propriétés de listes nommées avec []
    Par VincentL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 16h13
  5. Accès aux propriétés ScrollBar d'un composant TMemo
    Par fausto dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/10/2003, 11h08

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