Setelah mencari contoh bagaimana mengatur fokus elemen dengan sudut, saya melihat bahwa kebanyakan dari mereka menggunakan beberapa variabel untuk diperhatikan kemudian mengatur fokus, dan kebanyakan dari mereka menggunakan satu variabel berbeda untuk setiap bidang yang ingin mereka tetapkan fokus. Dalam bentuk, dengan banyak bidang, yang menyiratkan banyak variabel berbeda.
Dengan cara jquery dalam pikiran, tetapi ingin melakukan itu dengan cara sudut, saya membuat solusi yang kami tetapkan fokus dalam fungsi apa pun menggunakan id elemen, jadi, karena saya sangat baru dalam sudut, saya ingin mendapatkan beberapa pendapat jika jalan itu benar, punya masalah, apa pun, apa pun yang bisa membantu saya melakukan ini dengan cara yang lebih baik secara bersudut.
Pada dasarnya, saya membuat direktif yang melihat nilai cakupan yang ditentukan oleh pengguna dengan direktif, atau fokusElement default, dan ketika nilai itu sama dengan id elemen, elemen itu mengatur fokus itu sendiri.
angular.module('appnamehere')
.directive('myFocus', function () {
return {
restrict: 'A',
link: function postLink(scope, element, attrs) {
if (attrs.myFocus == "") {
attrs.myFocus = "focusElement";
}
scope.$watch(attrs.myFocus, function(value) {
if(value == attrs.id) {
element[0].focus();
}
});
element.on("blur", function() {
scope[attrs.myFocus] = "";
scope.$apply();
})
}
};
});
Masukan yang perlu mendapatkan fokus karena alasan tertentu, akan dilakukan dengan cara ini
<input my-focus id="input1" type="text" />
Di sini setiap elemen untuk mengatur fokus:
<a href="" ng-click="clickButton()" >Set focus</a>
Dan contoh fungsi yang mengatur fokus:
$scope.clickButton = function() {
$scope.focusElement = "input1";
}
Apakah itu solusi sudut yang bagus? Apakah ada masalah yang dengan pengalaman buruk saya, saya belum melihatnya?
Tentang solusi ini, kita bisa membuat arahan dan melampirkannya ke elemen DOM yang harus mendapatkan fokus ketika kondisi tertentu terpenuhi. Dengan mengikuti pendekatan ini kami menghindari penggandengan pengontrol ke ID elemen DOM.
Contoh kode direktif:
Penggunaan yang memungkinkan
});
HTML
sumber
myCondition
variabel $ scope telah disetel ke true dan kemudian pengguna memilih untuk fokus ke elemen lain, dapatkah Anda tetap memicu kembali fokus ketikamyCondition
sudah benar, kode Anda melihat perubahan untuk atributfocusOnCondition
tetapi tidak akan memicu ketika nilai yang Anda coba ubah masih sama.Saya suka menghindari pencarian DOM, jam tangan, dan pemancar global jika memungkinkan, jadi saya menggunakan pendekatan yang lebih langsung. Gunakan direktif untuk menetapkan fungsi sederhana yang berfokus pada elemen direktif. Kemudian panggil fungsi itu di mana pun diperlukan dalam lingkup pengontrol.
Berikut adalah pendekatan yang disederhanakan untuk melampirkannya ke ruang lingkup. Lihat cuplikan lengkap untuk menangani sintaks controller-as.
Pengarahan:
dan dalam html:
atau di pengontrol:
Tampilkan cuplikan kode
Diedit untuk memberikan penjelasan selengkapnya tentang alasan pendekatan ini dan untuk memperluas cuplikan kode untuk penggunaan controller-as.
sumber
ng-repeat
, dan saya hanya ingin mengatur fungsi fokus untuk yang pertama. Adakah ide bagaimana saya bisa secara kondisional mengatur fungsi fokus<input>
berdasarkan$index
misalnya?assign-focus-function-if="{{$index===0}}"
, dan kemudian sebagai baris pertama dari perintah keluar lebih awal sebelum menetapkan fungsi jika itu tidak benar:if (attr.assignFocusFunctionIf===false) return;
Catatan Saya memeriksa apakah itu secara eksplisitfalse
dan bukan hanya falsey sehingga direktif akan tetap berfungsi jika atribut itu tidak ditentukan._.set(scope, attributes.focusOnSaveInput, function() { element.focus(); })
.Anda dapat mencoba
untuk mis.
itu bekerja untuk saya.
sumber
Pilihan lain adalah menggunakan arsitektur pub-sub bawaan Angular untuk memberi tahu arahan Anda agar fokus. Mirip dengan pendekatan lain, tetapi kemudian tidak terkait langsung dengan properti, dan sebagai gantinya mendengarkan cakupannya untuk kunci tertentu.
Pengarahan:
HTML:
Pengontrol:
sumber
Saya lebih suka menggunakan ekspresi. Ini memungkinkan saya melakukan hal-hal seperti fokus pada sebuah tombol ketika sebuah bidang valid, mencapai panjang tertentu, dan tentu saja setelah dimuat.
Pada bentuk yang kompleks, ini juga mengurangi kebutuhan untuk membuat variabel cakupan tambahan untuk tujuan pemfokusan.
Lihat https://stackoverflow.com/a/29963695/937997
sumber