Eu quero passar o userName
de uma lista de userName
cliques de usuários sa logados para o bootstrap do Twitter modal
. Estou usando grails com angularjs , onde os dados são renderizados por angularjs .
Configuração
Minha página de visualização grails encouragement.gsp
é
<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>
Meu encourage/_encouragement_modal.gsp
é
<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>
Então, como posso passar userName
para encouragementModal
?
javascript
twitter-bootstrap
grails
angularjs
prayagupd
fonte
fonte
Respostas:
Para passar o parâmetro você precisa usar resolver e injetar os itens no controlador
Agora, se você usará assim:
neste caso, editId será indefinido. Você precisa injetá-lo, assim:
Agora vai funcionar bem, eu enfrento o mesmo problema muitas vezes, uma vez injetado, tudo começa a funcionar!
fonte
O outro não funciona. De acordo com os documentos, é assim que se deve fazer.
Veja plunkr
fonte
Alternativamente, você pode criar um novo escopo e passar por parâmetros através da opção de escopo
Em sua passagem de controlador modal em $ scope, você não precisa passar e itemsProvider ou o que quer que seja que você nomeou
fonte
$scope.$new(true)
para criar um novo escopo isolado sem a necessidade de injetar$rootScope
.resolve
) é que os argumentos são obrigatórios, então toda vez que você abre um modal, você deve resolver todos os argumentos ou a chamada para$modal.open()
falhará porque o controlador deseja seus argumentos. Usando essescope
truque bacana , as dependências se tornam opcionais.Você também pode passar parâmetros facilmente para o controlador modal adicionando uma nova propriedade com a instância de modal e obtê-la para o controlador modal. Por exemplo:
A seguir está o meu evento de clique no qual desejo abrir a visualização modal.
Controlador Modal:
fonte
Eu tentei como abaixo.
Liguei
ng-click
para o controlador do angularjs no botão Encourage ,Eu conjunto
userName
deencouragementModal
do controlador angularjs.Eu forneci um place (
userName
) para obter o valor do controlador angularjs ativadoencouragementModal
.Funcionou e eu me saudei.
fonte
angular.copy(user)
.Você realmente deve usar a interface do usuário Angular para essas necessidades. Confira: Diálogo de IU Angular
Em poucas palavras, com a caixa de diálogo Angular UI, você pode passar a variável de um controlador para o controlador de caixa de diálogo usando
resolve
. Aqui está seu controlador "de":E em seu controlador de diálogo:
EDITAR: desde a nova versão do ui-dialog, a entrada de resolução se torna:
resolve: { username: function () { return 'foo'; } }
fonte
resolve: function(){return {username: 'foo'}}
resolve: { username: 'foo'}
Você pode simplesmente criar uma função de controlador e passar seus parâmetros com o objeto $ scope.
fonte
Se você não está usando o AngularJS UI Bootstrap, veja como fiz isso.
Eu criei uma diretiva que manterá todo esse elemento do modal e recompilará o elemento para injetar seu escopo nele.
Estou assumindo que seu modelo modal está dentro do escopo do seu controlador, então adicione a diretiva my-modal ao seu modelo. Se você salvou o usuário clicado em $ scope.aModel , o modelo original agora funcionará.
Observação: o escopo inteiro agora está visível para seu modal, portanto, você também pode acessar $ scope.users nele.
fonte