apakah ini mungkin untuk melewatkan parameter dalam properti yang dihitung di Vue.Js. Saya bisa melihat ketika memiliki getter / setter menggunakan dihitung, mereka dapat mengambil parameter dan menetapkannya ke variabel. seperti di sini dari dokumentasi :
// ...
computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
// ...
Apakah ini juga mungkin:
// ...
computed: {
fullName: function (salut) {
return salut + ' ' + this.firstName + ' ' + this.lastName
}
}
// ...
Di mana properti yang dihitung mengambil argumen dan mengembalikan output yang diinginkan. Namun ketika saya mencoba ini, saya mendapatkan kesalahan ini:
vue.common.js: 2250 Uncaught TypeError: fullName bukan fungsi (...)
Haruskah saya menggunakan metode untuk kasus seperti itu?
javascript
vue.js
vuejs2
Saurabh
sumber
sumber
Jawaban:
Kemungkinan besar Anda ingin menggunakan metode
Penjelasan yang lebih panjang
Secara teknis Anda dapat menggunakan properti yang dihitung dengan parameter seperti ini:
(Terima kasih
Unirgy
untuk kode dasar untuk ini.)Perbedaan antara properti yang dihitung dan metode adalah bahwa properti yang dihitung di-cache dan berubah hanya ketika dependensinya berubah. Suatu metode akan mengevaluasi setiap kali dipanggil .
Jika Anda memerlukan parameter, biasanya tidak ada manfaat dari menggunakan fungsi properti yang dihitung atas metode dalam kasus seperti itu. Meskipun ini memungkinkan Anda untuk memiliki fungsi pengambil parametrized terikat pada instance Vue, Anda kehilangan caching sehingga tidak benar-benar mendapatkan keuntungan di sana, pada kenyataannya, Anda dapat merusak reaktivitas (AFAIU). Anda dapat membaca lebih lanjut tentang ini di dokumentasi Vue https://vuejs.org/v2/guide/computed.html#Computed-Caching-vs-Methods
Satu-satunya situasi yang bermanfaat adalah ketika Anda harus menggunakan rajin dan rajin menggunakannya. Situasi ini terjadi misalnya di Vuex . di Vuex itu satu-satunya cara untuk secara sinkron mendapatkan hasil parametrized dari toko (tindakan async). Dengan demikian pendekatan ini didaftar oleh dokumentasi Vuex resmi untuk getternya https://vuex.vuejs.org/guide/getters.html#method-style-access
sumber
<span v-text="fullName('Hi')"></span>
gantinya, juga berfungsi.<span :text="message"></span>
, tidak lagi berfungsi untuk Vue 2.0, seseorang harus menggunakan sebagai gantinya:<span v-text="message"></span>
atau<span>{{ message }}</span>
seperti yang ditunjukkan dalam codepen ini: codepen.io/Ismael-VC/pen/dzGzJaAnda dapat menggunakan metode, tetapi saya lebih suka masih menggunakan properti yang dikomputasi daripada metode, jika mereka tidak bermutasi data atau tidak memiliki efek eksternal.
Anda bisa memberikan argumen ke properti yang dihitung dengan cara ini (tidak didokumentasikan, tetapi disarankan oleh pengelola, tidak ingat di mana):
EDIT: Tolong jangan gunakan solusi ini, itu hanya mempersulit kode tanpa manfaat.
sumber
Nah, secara teknis kita bisa melewatkan parameter ke fungsi yang dikomputasi, dengan cara yang sama kita bisa melewatkan parameter ke fungsi pengambil di vuex. Fungsi seperti itu adalah fungsi yang mengembalikan fungsi.
Misalnya, di getter toko:
Pembuat ini dapat dipetakan ke fungsi komponen yang dikomputasi:
Dan kita dapat menggunakan fungsi yang dihitung ini dalam templat kita sebagai berikut:
Kita dapat menerapkan pendekatan yang sama untuk membuat metode terkomputasi yang mengambil parameter.
Dan gunakan di template kami:
Makhluk ini berkata, saya tidak mengatakan di sini bahwa itu adalah cara yang tepat untuk melakukan sesuatu dengan Vue.
Namun, saya bisa mengamati bahwa ketika item dengan ID yang ditentukan dimutasi di toko, tampilan tidak me-refresh isinya secara otomatis dengan properti baru dari item ini (pengikatan tampaknya berfungsi dengan baik).
sumber
Filter adalah fungsi yang disediakan oleh komponen Vue yang memungkinkan Anda menerapkan pemformatan dan transformasi ke bagian mana pun dari data dinamis templat Anda.
Mereka tidak mengubah data komponen atau apa pun, tetapi mereka hanya memengaruhi output.
Katakanlah Anda sedang mencetak nama:
Perhatikan sintaks untuk menerapkan filter, yaitu | filterName. Jika Anda terbiasa dengan Unix, itulah operator pipa Unix, yang digunakan untuk melewatkan output dari suatu operasi sebagai input ke yang berikutnya.
Properti filter dari komponen adalah sebuah objek. Filter tunggal adalah fungsi yang menerima nilai dan mengembalikan nilai lainnya.
Nilai yang dikembalikan adalah yang benar-benar dicetak dalam templat Vue.js.
sumber
Anda juga bisa memberikan argumen kepada getter dengan mengembalikan fungsi. Ini sangat berguna ketika Anda ingin menanyakan sebuah array di toko:
Perhatikan bahwa getter yang diakses melalui metode akan berjalan setiap kali Anda memanggilnya, dan hasilnya tidak di-cache.
Yang disebut Metode-Style Akses dan didokumentasikan pada docs Vue.js .
sumber
Namun ada beberapa kasus ketika Anda perlu melakukannya. Saya akan menunjukkan kepada Anda contoh sederhana nilai kelulusan untuk properti yang dikomputasi menggunakan pengambil dan penyetel.
Dan skripnya
Ketika tombol diklik, kami meneruskan ke properti yang dihitung dengan nama 'Roland' dan in
set()
kami mengubah nama dari 'John Doe' menjadi 'Roland'.Di bawah ini ada kasus penggunaan umum ketika dihitung digunakan dengan pengambil dan penyetel. Katakanlah Anda memiliki toko vuex follow:
Dan di komponen Anda, Anda ingin menambahkan
v-model
input tetapi menggunakan vuex store.sumber
Saya tidak sepenuhnya yakin apa yang ingin Anda capai tetapi sepertinya Anda akan baik-baik saja menggunakan metode alih-alih dihitung!
sumber
ketika ingin digunakan
sumber
Dihitung bisa dianggap memiliki fungsi. Jadi, untuk contoh valdiation, Anda dapat dengan jelas melakukan sesuatu seperti:
Yang akan Anda gunakan seperti:
Hanya perlu diingat bahwa Anda masih akan melewatkan caching khusus untuk dihitung.
sumber
Ya ada metode untuk menggunakan params. Seperti jawaban yang disebutkan di atas, dalam contoh Anda sebaiknya menggunakan metode karena eksekusi sangat ringan.
Hanya untuk referensi, dalam situasi di mana metode ini kompleks dan biayanya tinggi, Anda dapat men-cache hasil seperti:
Catatan: Saat menggunakan ini, hati-hati terhadap memori jika berurusan dengan ribuan
sumber