Saya ingin meneruskan userName
dari daftar userName
klik pengguna yang login ke twitter bootstrap modal
. Saya menggunakan grails dengan angularjs , di mana data diberikan melalui angularjs .
Konfigurasi
Halaman tampilan grails saya encouragement.gsp
adalah
<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>
Saya encourage/_encouragement_modal.gsp
adalah
<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>
Jadi, bagaimana saya bisa lolos userName
ke encouragementModal
?
javascript
twitter-bootstrap
grails
angularjs
prayagupd.dll
sumber
sumber
Jawaban:
Untuk melewatkan parameter, Anda perlu menggunakan tekad dan injeksi item dalam pengontrol
Sekarang jika Anda akan menggunakan seperti ini:
dalam hal ini editId tidak akan ditentukan. Anda perlu menyuntikkannya, seperti ini:
Sekarang akan bekerja dengan lancar, saya menghadapi masalah yang sama berkali-kali, setelah disuntikkan, semuanya mulai bekerja!
sumber
Yang lainnya tidak berfungsi. Menurut dokumen, inilah cara yang harus Anda lakukan.
Lihat plunkr
sumber
Atau Anda dapat membuat cakupan baru dan melewati params melalui opsi cakupan
Dalam modal controller Anda, berikan $ scope, Anda tidak perlu meneruskan dan itemsProvider atau penyelesaian apa pun yang Anda beri nama
sumber
$scope.$new(true)
untuk membuat scope baru yang terisolasi tanpa perlu menginjeksi$rootScope
.resolve
) adalah argumennya wajib sehingga setiap kali Anda membuka modal, Anda harus menyelesaikan semua argumen atau panggilan ke$modal.open()
akan gagal karena pengontrol menginginkan argumennya. Dengan menggunakanscope
trik rapi ini , dependensi menjadi opsional.Anda juga dapat dengan mudah melewatkan parameter ke modal controller dengan menambahkan properti baru dengan instance dari modal dan membawanya ke modal controller. Sebagai contoh:
Berikut adalah acara klik saya di mana saya ingin membuka tampilan modal.
Pengontrol Modal:
sumber
Saya mencoba seperti di bawah ini.
Saya memanggil
ng-click
pengontrol angularjs pada tombol Mendorong ,Saya mengatur
userName
dariencouragementModal
pengontrol angularjs.Saya menyediakan tempat (
userName
) untuk mendapatkan nilai dari pengontrol angularjsencouragementModal
.Itu berhasil dan saya memberi hormat pada diri saya sendiri.
sumber
angular.copy(user)
.Anda harus benar-benar menggunakan UI Angular untuk kebutuhan itu. Lihat ini: Dialog UI Angular
Singkatnya, dengan dialog UI Angular, Anda dapat meneruskan variabel dari pengontrol ke pengontrol dialog menggunakan
resolve
. Ini pengontrol "dari" Anda:Dan di pengontrol dialog Anda:
EDIT: Karena versi baru ui-dialog, entri penyelesaian menjadi:
resolve: { username: function () { return 'foo'; } }
sumber
resolve: function(){return {username: 'foo'}}
resolve: { username: 'foo'}
Anda cukup membuat fungsi pengontrol dan meneruskan parameter Anda dengan objek $ scope.
sumber
Jika Anda tidak menggunakan AngularJS UI Bootstrap, berikut cara saya melakukannya.
Saya membuat arahan yang akan menampung seluruh elemen modal Anda, dan mengkompilasi ulang elemen untuk menyuntikkan ruang lingkup Anda ke dalamnya.
Saya berasumsi template modal Anda berada di dalam cakupan pengontrol Anda, lalu tambahkan direktif my-modal ke template Anda. Jika Anda menyimpan pengguna yang diklik ke $ scope.aModel , template asli sekarang akan berfungsi.
Catatan: Seluruh cakupan sekarang terlihat oleh modal Anda sehingga Anda juga dapat mengakses $ scope.users di dalamnya.
sumber