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 :

Angular 9 Custom input input ne s'affiche pas


Sujet :

Angular

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Par défaut Angular 9 Custom input input ne s'affiche pas
    app.module.ts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import { SharedModule } from './services/shared/shared.module';
     
      imports: [
        SharedModule,
      ],
    share.module.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
     
    import { NgModule } from '@angular/core';
    import { CommonModule } from '@angular/common';
    import {FormsModule, ReactiveFormsModule} from '@angular/forms';
     
    import { LienEditComponent } from '../../components/editable/lien-edit/lien-edit.component';
    import { InputEditComponent } from '../../components/editable/input-edit/input-edit.component';
    import { CustomInputComponent } from '../../components/custom-input.component';
     
    @NgModule({
      exports: [
        CommonModule, 
        FormsModule,
        ReactiveFormsModule,
        CustomInputComponent
      ],
      declarations: [
        CustomInputComponent
      ],
    })
    export class SharedModule { }
    custom-input.component
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    import { Component, forwardRef } from '@angular/core';
    import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';
     
    const noop = () => {
    };
     
    export const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR: any = {
        provide: NG_VALUE_ACCESSOR,
        useExisting: forwardRef(() => CustomInputComponent),
        multi: true
    };
     
    @Component({
        selector: 'custom-input',
        template: `<div class="form-group">
                        <label><ng-content></ng-content>
                            <input [(ngModel)]="value" class="form-control" (blur)="onBlur()" >
                        </label>
                    </div>`,
        providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR]
    })
    export class CustomInputComponent implements ControlValueAccessor {
     
        //The internal data model
        private innerValue: any = '';
     
        //Placeholders for the callbacks which are later provided
        //by the Control Value Accessor
        private onTouchedCallback: () => void = noop;
        private onChangeCallback: (_: any) => void = noop;
     
        //get accessor
        get value(): any {
            return this.innerValue;
        };
     
        //set accessor including call the onchange callback
        set value(v: any) {
            if (v !== this.innerValue) {
                this.innerValue = v;
                this.onChangeCallback(v);
            }
        }
     
        //Set touched on blur
        onBlur() {
            this.onTouchedCallback();
        }
     
        //From ControlValueAccessor interface
        writeValue(value: any) {
            if (value !== this.innerValue) {
                this.innerValue = value;
            }
        }
     
        //From ControlValueAccessor interface
        registerOnChange(fn: any) {
            this.onChangeCallback = fn;
        }
     
        //From ControlValueAccessor interface
        registerOnTouched(fn: any) {
            this.onTouchedCallback = fn;
        }
     
    }
     
     
    /*
    import {Component} from '@angular/core'
     
    @Component({
        selector: 'demo-app',
        template: `
            <p><span class="boldspan">Form data:</span>{{demoForm.value | json}}</p>
            <p><span class="boldspan">Model data:</span> {{dataModel}}</p>
            <form #demoForm="ngForm">
              <custom-input name="someValue" 
                              [(ngModel)]="dataModel">
                  Write in this wrapper control:
              </custom-input>
            </form>`
    })
    export class AppComponent {
        dataModel: string = '';
    }
     
    */
    app.component.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     <p><span class="boldspan">Form data:</span>{{demoForm.value | json}}</p>
     <p><span class="boldspan">Model data:</span> {{dataModel}}</p>
     <form #demoForm="ngForm">
     <custom-input name="someValue" [(ngModel)]="dataModel"> Write in this wrapper control: </custom-input>
     </form>
    list_component.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <p><span class="boldspan">Form data:</span>{{demoForm.value | json}}</p>
     <p><span class="boldspan">Model data:</span> {{dataModel}}</p>
     <form #demoForm="ngForm">
     <custom-input name="someValue" [(ngModel)]="dataModel" ngDefaultControl> Write in this wrapper control: </custom-input>
     </form>
    affichage
    Nom : angular.png
Affichages : 945
Taille : 33,7 Ko
    sur l'image, on voit bien que le custom-input du app.component ( au dessus dans l'ecran) fonctionne
    et celui de la list ne s'affiche pas a l'exception des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      <p><span class="boldspan">Form data:</span>{{demoForm.value | json}}</p>
            <p><span class="boldspan">Model data:</span> {{dataModel}}</p>

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    ** y'a t'il une erreur dans la console javascript ?

    ** list-component possede t'il un module ?

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Par défaut
    non pas d'erreur dans le code, la console ne presente aucune erreur
    list-component est un composant , il n'a pas de module

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    le selector de list-component est ou ? (la balise)

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Par défaut
    bonsoir,
    la selection se fait a partir d'un menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <li>
                    <a routerLink="/owner/owners">Owner Actions</a>
                </li>
    routing
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const routes: Routes = [
      { path: 'owner', loadChildren: "../modules/application/owner/owner.module#OwnerModule" },
    ];
    OwnerModule
    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
     
    import { NgModule } from '@angular/core';
    import { FormsModule } from '@angular/forms';
    import { CommonModule } from '@angular/common';
    import { OwnerListComponent } from './owner-list/owner-list.component';
    import { OwnerRoutingModule } from './owner-routing/owner-routing.module';
    import { MaterialModule } from '../../../material/material.module';
    import { OwnerDetailsComponent } from './owner-details/owner-details.component';
    import { OwnerDataComponent } from './owner-details/owner-data/owner-data.component';
    import { AccountDataComponent } from './owner-details/account-data/account-data.component';
    import { ReactiveFormsModule } from '@angular/forms';
    import { OwnerCreateComponent } from './owner-create/owner-create.component';
    import { OwnerDeleteComponent } from './owner-delete/owner-delete.component';
    import { OwnerUpdateComponent } from './owner-update/owner-update.component';
     
    @NgModule({
      declarations: [
        OwnerListComponent, 
        OwnerDetailsComponent, 
        OwnerDataComponent, 
        AccountDataComponent, OwnerCreateComponent, OwnerDeleteComponent, OwnerUpdateComponent, 
      ],
      imports: [
        CommonModule,
        OwnerRoutingModule,
        MaterialModule,
        ReactiveFormsModule,
        FormsModule
      ]
    })
    export class OwnerModule { }


    list.component.ts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Component({
      selector: 'app-owner-list',
      templateUrl: './owner-list.component.html',
      styleUrls: ['./owner-list.component.css']
    })
     
    export class OwnerListComponent implements OnInit, AfterViewInit {
     
      dataModel: string = ''; 
     
     
    }
    list.component.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     <p><span class="boldspan">Form data:</span>{{demoForm.value | json}}</p>
     <p><span class="boldspan">Model data:</span> {{dataModel}}</p>
     <form #demoForm="ngForm">
     <custom-input name="someValue" [(ngModel)]="dataModel" ngDefaultControl> Write in this wrapper control: </custom-input>
     </form>

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    je ne vois pas le sharedModule dans l import ownerListmodule


    je t'ai pourtant demandé si listComponent faisait partie d'un module et c'est le cas !

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Par défaut
    je n'ai pas compris ta question.
    le shareModule est importé dans le app.module et non dans le owner.module

    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 { SharedModule } from './services/shared/shared.module';
    import { OwnerModule } from './modules/application/owner/owner.module';
     
    @NgModule({
      declarations: [
      ],
      imports: [
        OwnerModule,
        SharedModule
      ],
      providers: [
      ],
      bootstrap: [AppComponent],
    })
    export class AppModule { }
    J'ai ramené l'import du custom-item dans le owner.module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import { CustomInputComponent } from '../../../components/custom-input.component';
    @NgModule({
      declarations: [
        CustomInputComponent, 
      ],
      imports: [
      ],
      exports: [
        CustomInputComponent,
      ],
    })
    export class OwnerModule { }
    le custom -input s'affiche mais je me pose des questions:
    au cas où je dois importé dans le custom-input dans plusieurs composants qui sont chacun dans des modules différents. Comment éviter l'erreur always import dans la mesure où:
    je schématise:

    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
     
    import { SharedModule } from './services/shared/shared.module';
    import { OwnerModule } from './modules/application/owner/owner.module';
    import { AchatModule } from './modules/application/achar/achat.module;
    import { VenteModule } from './modules/application/vente/vente.module';
     
     
    @NgModule({
      declarations: [
      ],
      imports: [
        OwnerModule,
        SharedModule
      ],
      providers: [
      ],
      bootstrap: [AppComponent],
    })
    export class AppModule { }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import { CustomInputComponent } from '../../../components/custom-input.component';
    @NgModule({
      declarations: [
        CustomInputComponent, 
      ],
      imports: [
      ],
      exports: [
        CustomInputComponent,
      ],
    })
    export class OwnerModule { }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import { CustomInputComponent } from '../../../components/custom-input.component';
    @NgModule({
      declarations: [
        CustomInputComponent, 
      ],
      imports: [
      ],
      exports: [
        CustomInputComponent,
      ],
    })
    export class OwnerModule { }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import { CustomInputComponent } from '../../../components/custom-input.component';
    @NgModule({
      declarations: [
        CustomInputComponent, 
      ],
      imports: [
      ],
      exports: [
        CustomInputComponent,
      ],
    })
    export class AchatModule { }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import { CustomInputComponent } from '../../../components/custom-input.component';
    @NgModule({
      declarations: [
        CustomInputComponent, 
      ],
      imports: [
      ],
      exports: [
        CustomInputComponent,
      ],
    })
    export class VenteModule { }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import { CustomInputComponent } from '../../../components/custom-input.component';
    sera importé dans les trois modules qui eux a leur tour sont importés dans le app.module d'ou problème.
    Je precise que le shar.module n'est importé que dans le app.module.
    Si je decide de changer de logique en faisant ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import { CustomInputComponent } from '../../components/custom-input.component';
    @NgModule({
      imports: [
      ],
      exports: [
        CustomInputComponent,
      ],
      declarations: [
        SwitchComponent,
      ],
    })
    export class SharedModule { }
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import { SharedModule } from './services/shared/shared.module';
    @NgModule({
      declarations: [
      ],
      imports: [
       SharedModule ,
      ],
      exports: [
      ],
    })
    export class VenteModule { }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import { SharedModule } from './services/shared/shared.module';
    @NgModule({
      declarations: [
      ],
      imports: [
       SharedModule ,
      ],
      exports: [
      ],
    })
    export class AchatModule { }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import { SharedModule } from './services/shared/shared.module';
    @NgModule({
      declarations: [
      ],
      imports: [
       SharedModule ,
      ],
      exports: [
      ],
    })
    export class OwnerModule { }
    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
     
     
    import { OwnerModule } from './modules/application/owner/owner.module';
    import { AchatModule } from './modules/application/achar/achat.module;
    import { VenteModule } from './modules/application/vente/vente.module';
     
    @NgModule({
      declarations: [
      ],
      imports: [
        OwnerModule,
        SharedModule
      ],
      providers: [
      ],
      bootstrap: [AppComponent],
    })
    export class AppModule { }
    J'aurai le même souci car sharedModule sera importé plusieurs fois dans le app.module

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    app.module (import shareModule)
                      declarations: [ compX...)   
     
             comp A                                                     comp B
     
        comp A1   comp A2                                     Comp B1    
                       a2.module                                                                                               
                       (import shareModule)                           comp B11     comp B12
                       (declaration: comp X)                                             b12Module  (import shareModule)   
                                                                                                  (declarations: [ compX...)
    j'ai compris cela: (sauf erreur)

    ** disons que tous les composants A, A1, a2,B,B1, B11, B12 utilise un comp X de shareModule

    ** étant donné qu'on a defini un module pour A2, b12, on doit importer shareModule

    ** les autres composants se referent à son module parent qui app.module

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    350
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 350
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    app.module
      import {Amodule}
      import {Bmodule}
     
    a.module
      import {shareModule}
     
    b.module
      import {shareModule}
     
    share.module
      import {CustomInput}

    il y aura deux fois l'import du shareModule dans app.module, d'où problème

  10. #10
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    a.module et b.module ne sert à rien !

    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
     
    app.module
      declarations: [ AComponent, BComponent
      import {shareModule}
     
    a.module
      declarations: [
      import {}
     
    b.module
      declarations: [
      import {}
     
    share.module
      declarations: [CustomInput
      export: [CustomInput

    OU


    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
     
    app.module
      declarations: [ , 
      import {AModule, BModule}
     
    a.module
      declarations: [AComponent
      import {SharedModule},
      exports: [    AComponent  ],
     
    b.module
      declarations: [BComponent
      import {SharedModule},
      exports: [    BComponent  ],
     
    share.module
      declarations: [CustomInput
      export: [CustomInput

    attention:
    quand vous manipulez les modules, faites toujours un: ng build
    plutôt que ng serve qui ne detecte pas les modifs de module

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

Discussions similaires

  1. Intégration Custom Input File
    Par TheBleedz dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 05/02/2016, 11h54
  2. Réponses: 10
    Dernier message: 07/06/2012, 08h46
  3. Réponses: 3
    Dernier message: 11/03/2009, 10h05
  4. Curseur ne s'affiche pas pour input
    Par taroudant dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 02/07/2008, 08h23
  5. texte d'un input qui s'affiche quand on le renseigne
    Par identifiant_bidon dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2007, 17h28

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