Chcę przekazać userName
z listy użytkowników, którzy są userName
zalogowani, do programu ładującego Twittera modal
. Używam Grails z angularjs , gdzie dane są świadczone poprzez angularjs .
Konfiguracja
Moja strona widoku Grails encouragement.gsp
to
<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>
Mój encourage/_encouragement_modal.gsp
jest
<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>
Więc jak mogę przejść userName
do encouragementModal
?
javascript
twitter-bootstrap
grails
angularjs
prayagupd
źródło
źródło
Odpowiedzi:
Aby przekazać parametr, musisz użyć metody resell i wstrzyknąć elementy do kontrolera
Teraz, jeśli będziesz używać w ten sposób:
w tym przypadku editId będzie niezdefiniowane. Musisz to wstrzyknąć w ten sposób:
Teraz będzie działać gładko, wielokrotnie borykam się z tym samym problemem, po wstrzyknięciu wszystko zaczyna działać!
źródło
Drugi nie działa. Według dokumentacji jest to sposób, w jaki powinieneś to zrobić.
Zobacz plunkr
źródło
Alternatywnie możesz utworzyć nowy zasięg i przekazać parametry za pomocą opcji zakresu
W swoim przejściu kontrolera modalnego w $ scope, nie musisz wtedy przekazywać i itemsProvider ani czegokolwiek innego, co go nazwałeś
źródło
$scope.$new(true)
stworzyć nowy izolowany zakres bez potrzeby wstrzykiwania$rootScope
.resolve
) polega na tym, że argumenty są obowiązkowe, więc za każdym razem, gdy otwierasz modal, musisz rozwiązać wszystkie argumenty, w przeciwnym razie wywołanie$modal.open()
zakończy się niepowodzeniem, ponieważ kontroler chce swoich argumentów. Używając tej zgrabnejscope
sztuczki, zależności stają się opcjonalne.Możesz również łatwo przekazać parametry do kontrolera modalnego, dodając nową właściwość z instancją modalną i pobrać ją do kontrolera modalnego. Na przykład:
Poniżej znajduje się moje zdarzenie kliknięcia, w którym chcę otworzyć widok modalny.
Kontroler modalny:
źródło
Próbowałem jak poniżej.
Zadzwoniłem
ng-click
do kontrolera angularjs na przycisk Zachęcaj ,Ustawić
userName
odencouragementModal
od angularjs kontrolera.userName
Podałem miejsce ( ), aby uzyskać wartość z kontrolera angularjs naencouragementModal
.Udało się i zasalutowałem sobie.
źródło
angular.copy(user)
.Naprawdę powinieneś używać Angular UI do tych potrzeb. Sprawdź to: Angular UI Dialog
Krótko mówiąc, za pomocą okna dialogowego Angular UI można przekazać zmienną z kontrolera do kontrolera dialogowego za pomocą
resolve
. Oto Twój kontroler „od”:A w kontrolerze dialogu:
EDYCJA: Od nowej wersji okna dialogowego interfejsu użytkownika, pozycja rozwiązania zmienia się na:
resolve: { username: function () { return 'foo'; } }
źródło
resolve: function(){return {username: 'foo'}}
resolve: { username: 'foo'}
Możesz po prostu utworzyć funkcję kontrolera i przekazać swoje parametry za pomocą obiektu $ scope.
źródło
Jeśli nie używasz AngularJS UI Bootstrap, oto jak to zrobiłem.
Stworzyłem dyrektywę, która będzie utrzymywać cały element twojego modalu i przekompiluj element, aby wstrzyknąć do niego twój zakres.
Zakładam, że twój szablon modalny znajduje się w zakresie twojego kontrolera, a następnie dodaj dyrektywę my-modal do twojego szablonu. Jeśli zapisałeś klikniętego użytkownika w $ scope.aModel , oryginalny szablon będzie teraz działał.
Uwaga: cały zakres jest teraz widoczny dla twojego modalu, więc możesz również uzyskać dostęp do $ scope.users w nim.
źródło