Quiero pasar el userName
de una lista de userName
los clics de un usuario que ha iniciado sesión a twitter bootstrap modal
. Estoy usando griales con AngularJS , donde los datos se hace a través de AngularJS .
Configuración
Mi página de vista de griales encouragement.gsp
es
<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>
Mi encourage/_encouragement_modal.gsp
es
<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>
Entonces, ¿cómo puedo pasar userName
a encouragementModal
?
javascript
twitter-bootstrap
grails
angularjs
prayagupd
fuente
fuente
Respuestas:
Para pasar el parámetro, debe usar resolver e inyectar los elementos en el controlador
Ahora, si va a usar así:
en este caso, editId no estará definido. Necesitas inyectarlo, así:
Ahora funcionará sin problemas, me enfrento al mismo problema muchas veces, una vez inyectado, ¡todo comienza a funcionar!
fuente
El otro no funciona. Según los documentos, esta es la forma en que debe hacerlo.
Ver plunkr
fuente
Alternativamente, puede crear un nuevo alcance y pasar parámetros a través de la opción de alcance
En su controlador modal, pase $ scope, entonces no necesita pasar y itemsProvider o lo que sea que lo haya llamado
fuente
$scope.$new(true)
para crear un nuevo alcance aislado sin la necesidad de inyectar$rootScope
.resolve
) es que los argumentos son obligatorios, por lo que cada vez que abre un modal, debe resolver todos los argumentos o la llamada a$modal.open()
fallará porque el controlador quiere sus argumentos. Al usar este ingeniososcope
truco, las dependencias se vuelven opcionales.También puede pasar parámetros fácilmente al controlador modal agregando una nueva propiedad con una instancia de modal y llevarla al controlador modal. Por ejemplo:
A continuación se muestra mi evento de clic en el que quiero abrir la vista modal.
Controlador modal:
fuente
Intenté lo siguiente.
Llamé
ng-click
al controlador de angularjs en el botón Animar ,Puse
userName
deencouragementModal
desde AngularJS controlador.Proporcioné un lugar (
userName
) para obtener el valor del controlador angularjsencouragementModal
.Funcionó y me saludé.
fuente
angular.copy(user)
.Realmente deberías usar Angular UI para esas necesidades. Échale un vistazo: Diálogo de interfaz de usuario angular
En pocas palabras, con el diálogo de interfaz de usuario angular, puede pasar una variable de un controlador al controlador de diálogo usando
resolve
. Aquí está su controlador "de":Y en su controlador de diálogo:
EDITAR: Desde la nueva versión del ui-dialog, la entrada de resolución se convierte en:
resolve: { username: function () { return 'foo'; } }
fuente
resolve: function(){return {username: 'foo'}}
resolve: { username: 'foo'}
Simplemente puede crear una función de controlador y pasar sus parámetros con el objeto $ scope.
fuente
Si no está utilizando AngularJS UI Bootstrap, así es como lo hice.
Creé una directiva que contendrá todo ese elemento de su modal y volverá a compilar el elemento para inyectar su alcance en él.
Supongo que su plantilla modal está dentro del alcance de su controlador, luego agregue la directiva my-modal a su plantilla. Si guardó el usuario en el que se hizo clic en $ scope.aModel , la plantilla original ahora funcionará.
Nota: El alcance completo ahora es visible para su modal, por lo que también puede acceder a $ scope.users en él.
fuente