Dalam VueJs 2.0 docs saya tidak dapat menemukan kait yang akan mendengarkan props
perubahan.
Apakah VueJ memiliki kait seperti itu onPropsUpdated()
atau serupa?
Memperbarui
Seperti saran @wostex, saya mencoba watch
properti saya tetapi tidak ada yang berubah. Kemudian saya menyadari bahwa saya punya kasus khusus:
<template>
<child :my-prop="myProp"></child>
</template>
<script>
export default {
props: ['myProp']
}
</script>
Saya menyampaikan myProp
bahwa komponen induk menerima ke child
komponen. Maka watch: {myProp: ...}
tidak berfungsi.
javascript
vue.js
vuejs2
vue-component
Amio.io
sumber
sumber
Jawaban:
Anda dapat menggunakan properti
watch
untuk mengeksekusi beberapa kode pada perubahan properti:sumber
watch
. Karena teladan Anda, saya menyadari bahwa kasus saya sedikit berbeda. Saya telah memperbarui pertanyaan saya.Sudahkah Anda mencoba ini?
https://vuejs.org/v2/api/#watch
sumber
Dia,
dalam kasus saya, saya membutuhkan solusi di mana setiap alat peraga akan berubah, saya perlu mengurai data saya lagi. Saya bosan membuat pengamat yang terpisah untuk semua alat peraga saya, jadi saya menggunakan ini:
Poin kunci untuk mengambil dari contoh ini adalah menggunakan
deep: true
sehingga tidak hanya menonton $ alat peraga tetapi juga nilai-nilai yang bersarang seperti misalnyaprops.myProp
Anda dapat mempelajari lebih lanjut tentang opsi jam tangan yang diperluas ini di sini: https://vuejs.org/v2/api/#vm-watch
sumber
Anda perlu memahami, hierarki komponen yang Anda miliki dan bagaimana Anda melewati alat peraga, pasti kasus Anda istimewa dan biasanya tidak ditemui oleh para pengembang.
Jika myProp diubah dalam komponen induk, itu akan tercermin dalam komponen turunan juga.
Dan jika myProp diubah dalam komponen anak itu akan tercermin dalam komponen cucu juga.
Jadi jika myProp diubah dalam komponen induk maka akan tercermin dalam komponen cucu. (sejauh ini baik).
Oleh karena itu turun hierarki Anda tidak perlu melakukan alat peraga apa pun akan secara inheren reaktif
Sekarang berbicara tentang naik dalam hierarki
Jika myProp diubah dalam komponen grandChild, itu tidak akan tercermin dalam komponen anak. Anda harus menggunakan pengubah .sync pada child dan memancarkan event dari komponen grandChild.
Jika myProp diubah dalam komponen anak, itu tidak akan tercermin dalam komponen induk. Anda harus menggunakan pengubah .sync di induk dan memancarkan peristiwa dari komponen anak.
Jika myProp diubah dalam komponen grandChild, itu tidak akan tercermin dalam komponen induk (jelas). Anda harus menggunakan anak pengubah .sync dan memancarkan peristiwa dari komponen cucu, kemudian menonton prop dalam komponen anak dan memancarkan peristiwa pada perubahan yang sedang didengarkan oleh komponen induk menggunakan pengubah .sync.
Mari kita lihat beberapa kode untuk menghindari kebingungan
Parent.vue
Anak
Grandchild.vue
Tetapi setelah ini, Anda tidak akan membantu memperhatikan peringatan teriakan dari vue mengatakan
Sekali lagi seperti yang saya sebutkan sebelumnya sebagian besar devs tidak menemui masalah ini, karena ini merupakan pola anti. Itu sebabnya Anda mendapatkan peringatan ini.
Tetapi untuk menyelesaikan masalah Anda (sesuai dengan desain Anda). Saya percaya Anda harus melakukan pekerjaan di atas (hack jujur). Saya masih menyarankan Anda harus memikirkan kembali desain Anda dan membuatnya kurang rentan terhadap bug.
Saya harap ini membantu.
sumber
Tidak yakin apakah Anda telah menyelesaikannya (dan jika saya memahaminya dengan benar), tetapi inilah gagasan saya:
Jika orang tua menerima myProp, dan Anda ingin meneruskannya ke child dan menontonnya di child, maka orang tua harus memiliki salinan myProp (bukan referensi).
Coba ini:
dan dalam html:
sebenarnya Anda harus sangat berhati-hati ketika mengerjakan koleksi rumit dalam situasi seperti itu (mewariskan beberapa kali)
sumber
untuk penjilidan dua arah Anda harus menggunakan pengubah .sync
keterangan lebih lanjut...
dan Anda harus menggunakan properti arloji dalam komponen anak untuk mendengarkan dan memperbarui segala perubahan
sumber
Saya bekerja dengan properti yang dihitung seperti:
Sumber daya dalam hal ini adalah properti:
sumber
Bagi saya ini adalah solusi yang sopan untuk mendapatkan satu perubahan spesifik dan membuat logika dengannya
Saya akan menggunakan
props
dan variabelcomputed
properti untuk membuat logika setelah menerima perubahanJadi, kita bisa menggunakan _objectDetail di html render
atau dalam beberapa metode:
sumber
Anda dapat menggunakan mode tontonan untuk mendeteksi perubahan:
Lakukan segalanya pada level atom. Jadi pertama-tama periksa apakah metode menonton itu sendiri dipanggil atau tidak dengan menghibur sesuatu di dalamnya. Setelah ditetapkan bahwa arloji dipanggil, hancurkan dengan logika bisnis Anda.
sumber
Saya menggunakan
props
dan variabelcomputed
properti jika saya perlu membuat logika setelah menerima perubahansumber
jika myProp adalah objek, itu tidak dapat diubah seperti biasa. jadi, arloji tidak akan pernah terpicu. alasan mengapa myProp tidak dapat diubah adalah karena Anda hanya mengatur beberapa kunci myProp dalam banyak kasus. myProp itu sendiri masih satu-satunya. cobalah untuk menonton alat peraga dari myProp, seperti "myProp.a", itu seharusnya bekerja.
sumber
Fungsi jam tangan harus ditempatkan di komponen Anak. Bukan orang tua.
sumber
@ JoSchr punya jawaban yang bagus. di sini adalah cara lain untuk melakukan ini jika Anda tidak ingin 'dalam: benar'.
sumber