Je mon composant je passe un objet comme une liaison,Traiter avec les fixations ne sont pas prêts à Angluarjs
.component('selectionButton', {
bindings: {
parentForm : '<'
},
templateUrl: 'selection-button-component.html',
controller: 'selectionButtonController',
controllerAs: 'selBtnCtrl'
});
Le problème est que l'objet je passe n'est pas encore chargé lorsque mon composant est initialisé, donc dans le crochet onChanges $ Je l'ai fait:
vm.$onChanges = function(newObj){
if(angular.isDefined(newObj.parentForm.currentValue)){
vm.parentForm = newObj.parentForm.currentValue;
}
};
dans mon contrôleur j'appelle vm.parentForm
dans une fonction, que je déclencheur lorsque je clique sur un bouton après ma page est complètement chargée, mais je reçois toujours comme undefined
, même quand j'ai changé sa valeur en utilisant $onChanges
. Lorsque j'ai inspecté la fonction vm.$onChanges
, je peux voir que la valeur vm.parentForm
obtient la nouvelle valeur changesObj.parentForm
.
Comment puis-je résoudre ce problème?
Edit:
J'ai essayé d'envelopper mon élément avec un ng-if
comme suit:
<span ng-if="fullPage.posteForm">
<selection-button parent-form="fullPage.posteForm" ></selection-button>
</span>
mais cela ne fonctionne pas. J'ai aussi essayé la liaison bidirectionnelle qui ne marchait pas aussi bien.
deux solutions possibles. 1. changez les liaisons en =. 2. avoir un ng-if = "vm.parentForm" pour envelopper le html et ainsi une fois qu'il est initialisé, le html recompilera. –
Vous n'avez pas besoin de ng-if pour résoudre ceci: utilisez onChanges dans votre composant enfant de sorte que chaque fois que votre valeur sera mise à jour, hook onChanges sera déclenché dans le composant enfant et vous pourrez assigner la nouvelle valeur d'objet. '' '' onChanges() = fonction (changements) { if (changes.parentForm.currentValue! == undefined) { this.parentForm = changes.parentForm.currentValue; } '' '' – rbinsztock
Vous n'avez en fait pas besoin de mettre à jour la portée locale du composant car elle se met automatiquement à jour lors de toute modification de liaison. – Korte