Saya menggunakan versi "Angularised" dari kontrol Spin, seperti yang didokumentasikan di sini: http://blog.xvitcoder.com/adding-a-weel-progress-indicator-to-your-angularjs-application/
Salah satu hal yang saya tidak suka tentang solusi yang ditampilkan adalah penggunaan jQuery di layanan yang secara efektif melampirkan kontrol putaran ke elemen DOM. Saya lebih suka menggunakan konstruksi sudut untuk mengakses elemen. Saya juga ingin menghindari "hard-coding" id elemen yang perlu dilampirkan oleh spinner dalam layanan dan alih-alih menggunakan arahan yang menetapkan id dalam layanan (singleton) sehingga pengguna layanan lain atau layanan itu sendiri tidak perlu tahu itu.
Saya berjuang dengan apa yang angular.element berikan kepada kami vs apa yang document.getElementById pada id elemen yang sama memberi kami. misalnya. Ini bekerja:
var target = document.getElementById('appBusyIndicator');
Tak satu pun dari ini yang:
var target = angular.element('#appBusyIndicator');
var target = angular.element('appBusyIndicator');
Saya jelas melakukan sesuatu yang seharusnya jelas salah! Adakah yang bisa membantu?
Dengan asumsi saya bisa mendapatkan yang bekerja di atas, saya punya masalah yang sama dengan mencoba mengganti akses jQuery ke elemen: misalnya $(target).fadeIn('fast');
bekerja
angular.element('#appBusyIndicator').fadeIn('fast')
atau angular.element('appBusyIndicator').fadeIn('fast')
tidak
Adakah yang bisa mengarahkan saya ke contoh dokumentasi yang menjelaskan penggunaan elemen "elemen" Angular vs elemen DOM? Sudut jelas "membungkus" elemen dengan properti sendiri, metode dll tetapi seringkali sulit untuk mendapatkan nilai aslinya. Misalnya jika saya memiliki <input type='number'>
bidang dan saya ingin mengakses konten asli yang terlihat di ui ketika pengguna mengetik "-" (tanpa tanda kutip) saya tidak mendapatkan apa-apa, mungkin karena "type = number" berarti Angular menolak input meskipun terlihat di UI dan saya ingin melihatnya sehingga saya bisa mengujinya dan menghapusnya.
Setiap petunjuk / jawaban dihargai.
Terima kasih.
Jawaban:
Itu bisa bekerja seperti itu:
Anda membungkus panggilan
Document.querySelector()
Javascript asli ke dalamangular.element()
panggilan. Jadi, Anda selalu mendapatkan elemen dalam objek jqLite atau jQuery , tergantung apakahjQuery
tersedia / dimuat.Dokumentasi resmi untuk
angular.element
:Jika Anda heran mengapa harus menggunakan
document.querySelector()
, silakan baca jawaban ini .sumber
var autocomplete = new google.maps.places.Autocomplete( $document[0].querySelector('#address'), { types: ['geocode'], componentRestrictions: {country: 'us'} } );
. Terima kasih atas tip @kaiser. Untuk beberapa alasan, peta api mengeluh bahwa apa yang saya lewati di param pertama bukan input saat saya gunakanangular.element(document.querySelector('#address'))
, tetapi semuanya baik-baik saja yang berakhir dengan baik.Anda harus membaca dokumen elemen sudut jika Anda belum melakukannya, sehingga Anda dapat memahami apa yang didukung oleh jqLite dan apa yang tidak -jqlite adalah himpunan bagian dari jquery yang dibangun ke dalam sudut.
Para pemilih tidak akan bekerja dengan jqLite saja, karena pemilih oleh id tidak didukung.
Jadi, baik:
Sunting: Perhatikan bahwa jQuery harus dimuat sebelum angularJS untuk diutamakan daripada jqLite:
Sunting2: Saya melewatkan bagian kedua dari pertanyaan sebelumnya:
Masalah dengan
<input type="number">
, saya pikir itu bukan masalah sudut, itu adalah perilaku yang dimaksudkan dari elemen nomor html5 asli .Itu tidak akan mengembalikan nilai non-numerik bahkan jika Anda mencoba mengambilnya dengan jquery
.val()
atau dengan.value
atribut mentah .sumber
adalah sama dengan
sumber
Saya tidak berpikir itu cara yang tepat untuk menggunakan sudut. Jika metode kerangka tidak ada, jangan buat itu! Ini berarti kerangka kerja (di sini bersudut) tidak bekerja dengan cara ini.
Dengan sudut Anda tidak boleh memanipulasi DOM seperti ini (cara jquery), tetapi gunakan penolong sudut seperti
Atau buat direktif Anda sendiri (komponen DOM Anda sendiri) untuk memiliki kontrol penuh padanya.
BTW, Anda bisa lihat di sini http://caniuse.com/#search=queryselector querySelector didukung dengan baik sehingga dapat digunakan dengan aman.
sumber
Jika seseorang menggunakan tegukan, itu menunjukkan kesalahan jika kita menggunakan
document.getElementById()
dan itu menyarankan untuk digunakan$document.getElementById()
tetapi tidak berhasil.Gunakan -
sumber
Anda dapat mengakses elemen menggunakan $ document ($ document perlu disuntikkan)
atau dengan elemen sudut, elemen yang ditentukan dapat diakses sebagai:
sumber
Anda harus menyuntikkan $ document pada controller Anda, dan menggunakannya sebagai ganti objek dokumen asli.
Jika Anda tidak memerlukan bungkus elemen gaya jquery, $ document [0] .querySelector ('# MyID') akan memberi Anda objek DOM.
sumber
Ini bekerja dengan baik untuk saya.
sumber
Peningkatan jawaban kaiser:
Jangan lupa untuk menyuntikkan
$document
ke direktif Andasumber
find() - Limited to lookups by tag name
, itu tidak bekerja pada id. Anda juga memiliki penutupan ekstra)
.Mungkin saya terlambat di sini tetapi ini akan berhasil:
Perhatikan, tidak ada
appBusyIndicator
, itu adalah nilai ID polos.Apa yang terjadi di balik layar: (dengan asumsi itu diterapkan pada div) (diambil dari angular.js baris no: 2769 dan seterusnya ...)
Secara default jika tidak ada jQuery di halaman, jqLite akan digunakan. Argumen ini dipahami secara internal sebagai id dan objek jQuery yang sesuai dikembalikan.
sumber
angular.element("#myId")
bekerja dengan baik.