Nous avons une page qui s'ouvre une boîte de dialogue modale avec une forme comme ci-dessous. Cependant, quand nous avons touché le contrôleur doit gérer l'action du formulaire, la forme de l'objet n'est pas définie et que je suis trop Angulaire débutant de comprendre pourquoi...
Ceci est la page parent contrôleur de titulaire de la fonction pour ouvrir la boîte de dialogue modale:
app.controller('organisationStructureController', ['$scope', ..., '$modal', function ($scope, ..., $modal) {
$scope.openInvitationDialog = function (targetOrganisationId) {
$modal.open({
templateUrl: 'send-invitation.html',
controller: 'sendInvitationController',
resolve: {$targetOrganisationId: function () {
return targetOrganisationId;
}
}
}
);
};
sur une page comme ceci:
// inside a loop over organisations
<a ng-click="openInvitationDialog({{organisation.id}})">Invite new member</a>
l'invitation-dialogue html ressemble à ceci:
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<!-- ... -->
</div>
<div class="modal-body">
<form name="invitationForm">
<div class="form-group">
<label for="email" style="color:white;">Email</label>
<input type="email" class="form-control" autocomplete="off" placeholder="New member email" id="email" name="email" ng-model="invitation.email" required="true"/>
<span class="error animated fadeIn" ng-show="invitationForm.email.$dirty && invitationForm.email.$error.required">Please enter an email address!</span>
<span class="error animated fadeIn" ng-show="invitationForm.email.$error.email">Invalid email</span>
</div>
<!-- ... -->
<div class="modal-footer">
<button type="button" class="btn btn-default" ng-click="cancel()">Cancel</button>
<button type="submit" class="btn btn-primary" ng-click="sendInvitation()">Invite</button>
</div>
</form>
</div>
</div>
</div>
Le contrôleur doit gérer l'invitation est ailleurs:
app.controller('sendInvitationController', ['$targetOrganisationId', '$scope', ...,
function ($targetOrganisationId, $scope, ...) {
$scope.invitation = {
// ...
targetOrganisation: {
id: $targetOrganisationId
}
};
$scope.sendInvitation = function () {
// $scope.invitationForm is undefined
if ($scope.invitationForm.$invalid) {
return false;
}
// send the invitation...
};
}]);
Quelle est donc la bonne façon d'obtenir la forme de la portée dans le contrôleur?
Peut-être que j'ai besoin d'injecter $modal
dans la sendInvitationController
et ajouter l' sendInvitation
fonction de celle-ci? Mais quand je le fais, que l'action ne pénètre jamais dans le contrôleur. Ou dois-je ajouter une fonction qui gère l'action soumettre à l' $modal.open({ ...
au lieu de référencer le contrôleur? Bien que je préfèrerais avoir le sendInvitationController dans son propre fichier et la portée.
Merci pour toute aide!
MODIFIER
Nous avons trouvé plusieurs choses qui nous a aidés à construire une solution de contournement et pourraient aider quelqu'un à une réponse à la question elle-même:
- l'
$scope.invitation
objet n'est pas définie dans l'sendInvitationController
mais qui détient les données correctes, tandis que d'$scope.invitationForm
reste indéfini. - à l'intérieur de la send-invitation.html nous pouvons accéder
$scope.invitationForm.$invalid
et de procéder à la validation de droite il y a:<button type="button" ng-click="sendInvitation()" ng-disabled="invitationForm.$invalid">Invite</button>
La question est donc: pourquoi la liaison de l' invitationForm
objet à l' $scope
échouer sur soumettre, tandis que le modèle de formulaire de lie correcetly?