Je veux passer le userName
d'une liste de userName
clics d'utilisateurs connectés sa à Twitter bootstrap modal
. J'utilise des grails avec angularjs , où les données sont rendues via angularjs .
Configuration
Ma page de vue Grails encouragement.gsp
est
<div ng-controller="EncouragementController">
<g:render template="encourage/encouragement_modal" />
<tr ng-cloak
ng-repeat="user in result.users">
<td>{{user.userName}}</rd>
<td>
<a class="btn btn-primary span11" href="#encouragementModal" data-toggle="modal">
Encourage
</a>
</td>
</tr>
Mon encourage/_encouragement_modal.gsp
est
<div id="encouragementModal" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button>
<h3>Confirm encouragement?</h3>
</div>
<div class="modal-body">
Do you really want to encourage <b>{{aModel.userName}}</b>?
</div>
<div class="modal-footer">
<button class="btn btn-info"
ng-click="encourage('${createLink(uri: '/encourage/')}',{{aModel.userName}})">
Confirm
</button>
<button class="btn" data-dismiss="modal" aria-hidden="true">Never Mind</button>
</div>
</div>
Alors, comment puis-je passer userName
à encouragementModal
?
Réponses:
Pour passer le paramètre, vous devez utiliser la résolution et injecter les éléments dans le contrôleur
Maintenant, si vous allez utiliser comme ceci:
dans ce cas, editId ne sera pas défini. Vous devez l'injecter, comme ceci:
Maintenant, cela fonctionnera bien, je suis confronté au même problème plusieurs fois, une fois injecté, tout commence à fonctionner!
la source
L'autre ne fonctionne pas. Selon la documentation, c'est ainsi que vous devez le faire.
Voir plunkr
la source
Vous pouvez également créer une nouvelle étendue et passer les paramètres via l'option scope
Dans votre passe de contrôleur modal dans $ scope, vous n'avez alors pas besoin de transmettre et itemsProvider ou ce que vous avez résolu
la source
$scope.$new(true)
créer une nouvelle portée isolée sans avoir besoin d'injecter$rootScope
.resolve
) est que les arguments sont obligatoires, donc à chaque fois que vous ouvrez un modal, vous devez résoudre tous les arguments ou l'appel à$modal.open()
échouera car le contrôleur veut ses arguments. En utilisant cettescope
astuce, les dépendances deviennent facultatives.Vous pouvez également facilement passer des paramètres au contrôleur modal en ajoutant une nouvelle propriété avec une instance de modal et en l'obtenir au contrôleur modal. Par exemple:
Voici mon événement de clic sur lequel je veux ouvrir la vue modale.
Contrôleur modal:
la source
J'ai essayé comme ci-dessous.
J'ai appelé le
ng-click
contrôleur angularjs sur le bouton Encourager ,J'ai mis
userName
duencouragementModal
contrôleur angularjs.J'ai fourni un endroit (
userName
) pour obtenir la valeur du contrôleur angularjsencouragementModal
.Cela a fonctionné et je me suis salué.
la source
angular.copy(user)
.Vous devriez vraiment utiliser Angular UI pour ces besoins. Vérifiez-le: boîte de dialogue de l'interface utilisateur angulaire
En un mot, avec la boîte de dialogue Angular UI, vous pouvez passer une variable d'un contrôleur au contrôleur de dialogue à l'aide de
resolve
. Voici votre contrôleur "de":Et dans votre contrôleur de dialogue:
EDIT: Depuis la nouvelle version de l'interface utilisateur, l'entrée de résolution devient:
resolve: { username: function () { return 'foo'; } }
la source
resolve: function(){return {username: 'foo'}}
resolve: { username: 'foo'}
Vous pouvez simplement créer une fonction de contrôleur et passer vos paramètres avec l'objet $ scope.
la source
Si vous n'utilisez pas AngularJS UI Bootstrap, voici comment je l'ai fait.
J'ai créé une directive qui contiendra tout cet élément de votre modal et recompiler l'élément pour y injecter votre portée.
Je suppose que votre modèle modal est dans la portée de votre contrôleur, puis ajoutez la directive my-modal à votre modèle. Si vous avez enregistré l'utilisateur cliqué dans $ scope.aModel , le modèle d'origine fonctionnera désormais.
Remarque: la portée entière est maintenant visible pour votre modal, vous pouvez donc également y accéder à $ scope.users .
la source