Angulaire 2, ne peux pas en mesure d'accéder à une variable dans un Composant à partir d'un autre Composant
Désolé si c'est un doublon de question, j'ai cherché la solution à travers le Web ne pouvez pas en mesure de trouver toute sorte am poster, Suis en train d'essayer d'accéder à une variable d'un composant à l'intérieur d'un autre composant
Ce que j'ai Essayé
J'ai créé un modèle de type d'objet et ont établi la valeur à l'intérieur d'un composant d'Une méthode, et essayé d'accéder à ce modèle d'objet composant B, de sorte que je peux définir la valeur de l'élément B des Éléments, mais obtenir de l'objet comme indéfini
Problème
Un composant est chargé en premier, dans le navigateur, si elle contient une table sur le clic de la ligne du tableau reçois les données de ligne d'objet et définition de l'objet à un Modèle qui contient une structure similaire à l'objet et je peux en mesure d'obtenir la valeur de l'objet au Composant, alors que j'ai essayé d'appeler le modèle à partir d'un Composant B, de sorte que je peux accéder à la valeur de l'objet. mais je suis l'obtention de la valeur de l'objet comme undefined cela est dû à la Composante B est un Modal qui est Appelée à l'intérieur de la Composante d'Un Modèle.
Composant Un
public rowSelected:boolean = true;
constructor(public users : User ) {}
getRowData(rowIndex: number, rowData: any): void {
this.rowSelected = $(rowIndex).hasClass('selected');
console.log(rowData);
this.users= rowData.FirstName;
console.log(this.users); //can able to get the object value
}
Composante D'Un Modèle
<div bsModal #editUserModal="bs-modal" class="modal fade" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button class="close" aria-label="Close" type="button" (click)="editUserModal.hide()">
<span aria-hidden="true">×</span>
</button>
<h5 class="modal-title"><b>Edit User</b></h5>
</div>
<div class="modal-body">
<componenetB #edituserDiv></componenetB>
</div>
<div class="modal-footer">
<button class="btn btn-primary btn-sm confirm-btn gap0" type="button" (click)="edituserDiv.EditUserSubmit()">Submit</button>
<button type="button" class="btn btn-default btn-sm gap-left10 gap0" type="button" (click)="editUserModal.hide()">Close</button>
</div>
</div>
</div>
</div>
Modèle
export class User {
UserName: any
Password: any
FirstName: any
MiddleName: any
LastName: any
Status: any
Locked: any
Active: any
CreatedOn: any
LastModified: any
}
Composant B
export class Component B {
constructor(public userz : User) {
console.log(this.userz) //Object Value is Undefined
}
}
Merci de m'aider à résoudre ce problème, merci d'avance
- angular.io/docs/ts/latest/tutorial/toh-pt3.html
- pouvez vous s'il vous plaît de souligner quel est le problème ?..
- en fait suis en train de données sur le clic de la ligne, donc, au départ, le composant B obtient valeur non définie à l'aide de @input()
- Sans @Input() et @Sortie, vous ne pouvez pas transmettre les données entre les composants
- suis d'Erreur de la console comme Impossible de lire la propriété 'émettent' undefined, aucune idée
Vous devez vous connecter pour publier un commentaire.
Utilisation
@Input
quand vous voulez transmettre des données de parent à enfant. Ici je supposeusers
est un tableau. Si pas, régler le type en conséquence.Dans votre template parent:
De votre enfant (composant B), ne pas injecter
User
dans le constructeur. Utilisation@Input
à la place:De sorte que vous n'obtenez pas non défini erreur si la
users
est en fait défini plus tard, il vous suffit d'instancier lausers
dans votre parent, de sorte qu'il ne soit pas défini, alors qu'il attend pour des valeurs de:Voici une démo, qui simule les valeurs de
users
sont fixés à un point plus tard. Cliquez simplement sur le bouton et les valeurs apparaissent dans l'enfant, les valeurs qui sont définies dans le parent.Plunker
setUsers
est tiré, qui définit les valeurs, et puis ils sont présentés dans l'enfant.Je ne vois pas la liaison. Peut-être êtes-vous manque quelque chose comme
<hero-detail [hero]="selectedHero"></hero-detail>
Composant Un
Composant B Html
<component-a (selectedUser)="PrintUserInfo($event)"></component-a>
Composant B. ts
selectedUser : new EventEmitter<User>;
avez-vous écrit cette ligne à l'intérieur de votre classe ?J'espère que je comprends de votre question. Si cela répond à votre question, n'oubliez pas de marquer comme réponse.
Si vous disposez d'un composant (Un parent) qui a pour enfant composant (B - enfant), alors vous pouvez utiliser l'Entrée/Sortie des décorateurs pour communiquer entre eux.
Composant enfant a propriété d'événement userSelected, il aura le feu de l'événement lorsque émettre(valeur?: T): void méthode sera appelée. Composant Parent recevra événement ici - (userSelected)="onUserSelect($event) où $event contient la valeur passée à émettre de la méthode. De sorte qu'il peut être utilisé dans le composant parent
Parent:
Enfant:
Mise à JOUR - version d'Entrée
Plus je vais dans votre mise en œuvre, j'ai l'impression que toute la logique est bizarre.
Ce que je comprends, vous avez une table d'utilisateurs dans le Volet A, ensuite, lorsqu'une ligne est sélectionnée fenêtre modale apparaît (composant B) lorsque vous manipulez les détails de l'utilisateur.
Sorte de modèle pour le volet A doit ressembler à ceci (version simplifiée):
Alors pour B de la composante définir la variable d'entrée avec le même nom que celui utilisé dans Un modèle
Ainsi, il semble que vous manquez à la logique de code pour sélectionner l'utilisateur. Je suppose que vous devriez avoir quelque chose de similaire à ceci, c'est juste un exemple. Vous devez passer tout l'objet de composant B.
Pour donner plus de réponse précise, veuillez fournir plunker avec votre exemple, avec ce peu d'informations est difficile de comprendre ce que vous allez atteindre