Saya harus dapat menambahkan misalnya "contenteditable" ke elemen, berdasarkan pada variabel boolean pada lingkup.
Contoh penggunaan:
<h1 attrs="{'contenteditable=\"true\"': editMode}">{{content.title}}</h1>
Akan menghasilkan contenteditable = true ditambahkan ke elemen jika $scope.editMode
disetel ke true
. Apakah ada cara mudah untuk mengimplementasikan perilaku atribut seperti ini? Saya sedang mempertimbangkan untuk menulis arahan dan berbagi jika tidak.
Sunting: Saya dapat melihat bahwa tampaknya ada beberapa kesamaan antara arahan attrs yang saya usulkan dan ng-bind-attrs, tetapi telah dihapus di 1.0.0.rc3 , mengapa demikian?
angularjs
angularjs-directive
Kenneth Lynne
sumber
sumber
ng-attr="expression"
.contentEditable
arahan.<h1 ng-attr-contenteditable="{{editMode && true : false}}">{{content.title}}</h1>
Jawaban:
Saya menggunakan yang berikut ini untuk mengatur attr kelas secara kondisional ketika ng-class tidak dapat digunakan (misalnya saat menata SVG):
Pendekatan yang sama harus bekerja untuk tipe atribut lainnya.
(Saya pikir Anda harus menggunakan Angular terbaru yang tidak stabil untuk menggunakan ng-attr-, saya saat ini di 1.1.4)
sumber
ng-attr-
, maka kompiler akan menghapus awalan, dan menambahkan atribut dengan nilainya terikat pada hasil ekspresi sudut dari nilai atribut asli.Anda bisa mengawali atribut dengan
ng-attr
untuk eval ekspresi Angular. Ketika hasil dari ekspresi tidak terdefinisi, ini menghilangkan nilai dari atribut.Akan menghasilkan (ketika nilai salah)
Jadi jangan gunakan
false
karena itu akan menghasilkan kata "false" sebagai nilainya.Saat menggunakan trik ini dalam arahan. Atribut untuk arahan akan salah jika mereka kehilangan nilai.
Misalnya, hal di atas salah.
sumber
undefined
adalah kasus khusus. "Saat menggunakan ngAttr, flag allOrNothing dari $ interpolate digunakan, jadi jika ekspresi apa pun dalam string yang diinterpolasi menghasilkan undefined, atribut dihapus dan tidak ditambahkan ke elemen."ng-attr-foo
masih akan selalu menggunakanfoo
arahan jika ada, bahkanng-attr-foo
dievaluasiundefined
. diskusiSaya mendapatkan ini bekerja dengan menetapkan atribut keras. Dan mengendalikan penerapan atribut menggunakan nilai boolean untuk atribut tersebut.
Berikut ini cuplikan kode:
Saya harap ini membantu.
sumber
Dalam versi terbaru Angular (1.1.5), mereka telah menyertakan arahan bersyarat yang disebut
ngIf
. Ini berbeda daringShow
danngHide
dalam elemen tidak tersembunyi, tetapi tidak termasuk dalam DOM sama sekali. Mereka sangat berguna untuk komponen yang mahal untuk dibuat tetapi tidak digunakan:sumber
<h1 ng-if="editMode" contenteditable="true"><h1 ng-if="!editMode">
ng-if
menciptakan ruang lingkup baru.ng-if
menciptakan ruang lingkup baru tetaping-show
tidak. Ketidakkonsistenan ini selalu menjadi titik pahit bagi saya. Reaksi pemrograman defensif untuk ini adalah: "selalu mengikat sesuatu yang titik dalam ekspresi" dan itu tidak akan menjadi masalah.Untuk mendapatkan atribut untuk menunjukkan nilai tertentu berdasarkan pemeriksaan boolean, atau dihilangkan seluruhnya jika pemeriksaan boolean gagal, saya menggunakan yang berikut:
ng-attr-example="{{params.type == 'test' ? 'itWasTest' : undefined }}"
Contoh penggunaan:
<div ng-attr-class="{{params.type == 'test' ? 'itWasTest' : undefined }}">
Apakah output
<div class="itWasTest">
atau<div>
berdasarkan nilaiparams.type
sumber
<h1 ng-attr-contenteditable="{{isTrue || undefined }}">{{content.title}}</h1>
akan menghasilkan ketika isTrue = true:
<h1 contenteditable="true">{{content.title}}</h1>
dan ketika isTrue = false:
<h1>{{content.title}}</h1>
sumber
<h1 ng-attr-contenteditable="{{isTrue ? 'row' : undefined}}">{{content.title}} </h1>
<video ng-attr-autoplay="{{vm.autoplay || undefined}}" />
Mengenai solusi yang diterima, yang diposting oleh Ashley Davis, metode yang dijelaskan masih mencetak atribut di DOM, terlepas dari kenyataan bahwa nilai yang telah ditetapkan tidak ditentukan.
Misalnya, pada pengaturan bidang input dengan model-ng dan atribut nilai:
Terlepas dari apa yang ada di balik myValue, atribut nilai masih dicetak di DOM, dengan demikian, ditafsirkan. Model-Ng kemudian, menjadi ditimpa.
Agak tidak menyenangkan, tetapi menggunakan ng-jika berhasil:
Saya akan merekomendasikan menggunakan cek lebih rinci di dalam arahan ng-if :)
sumber
Anda juga dapat menggunakan ekspresi seperti ini:
sumber
Saya benar-benar menulis tambalan untuk melakukan ini beberapa bulan yang lalu (setelah seseorang bertanya tentang hal itu di #angularjs di freenode).
Mungkin tidak akan digabung, tetapi sangat mirip dengan ngClass: https://github.com/angular/angular.js/pull/4269
Entah itu digabung atau tidak, hal-hal ng-attr- * yang ada mungkin cocok untuk kebutuhan Anda (seperti yang disebutkan orang lain), meskipun mungkin sedikit lebih janggal daripada fungsionalitas gaya ngClass yang Anda sarankan.
sumber
Untuk validasi bidang input dapat Anda lakukan:
Ini akan berlaku atribut
max
untuk100
hanya jikadiscountType
didefinisikan sebagai%
sumber
Sunting : Jawaban ini terkait dengan Angular2 +! Maaf, saya melewatkan tag!
Jawaban asli:
Adapun kasus yang sangat sederhana ketika Anda hanya ingin menerapkan (atau mengatur) atribut jika nilai Input tertentu ditetapkan, semudah
Itu sama dengan:
(Jadi, opsional Nilai diterapkan jika diberikan sebaliknya ekspresi salah dan atribut tidak diterapkan.)
Contoh: Saya memiliki case, di mana saya membiarkan menerapkan warna tetapi juga gaya arbitrer, di mana atribut warna tidak berfungsi karena sudah diatur (bahkan jika @Input () warna tidak diberikan):
Jadi, "style.color" hanya disetel, ketika atribut warna ada di sana, jika tidak atribut warna dalam string "style" dapat digunakan.
Tentu saja, ini juga bisa dicapai dengan
dan
sumber
Kalau-kalau Anda membutuhkan solusi untuk Angular 2 kemudian sederhana, gunakan properti mengikat seperti di bawah ini, misalnya Anda ingin membuat input hanya dibaca secara kondisional, kemudian tambahkan kurung kurawal di attrbute diikuti dengan = tanda dan ekspresi.
sumber
Mungkinkah ini berfungsi:
Yang menyenangkan di sini adalah bahwa jika item.isSelected adalah false maka atribut tidak dirender.
sumber