


Artikel untuk memahami prinsip pengikatan dua hala data pemerhati dalam Vue (dengan kod)
Dalam artikel sebelumnya "Analisis prinsip pengikatan dua hala data pemerhati dalam Vue (perkongsian kod) ", kami mengetahui tentang prinsip pengikatan dua hala data pemerhati dalam Vue . Artikel berikut akan memberi anda pemahaman tentang prinsip pengikatan dua hala data pemerhati dalam Vue Ia mempunyai nilai rujukan tertentu Rakan yang memerlukan boleh merujuknya.
vue
Prinsip pengikatan dua hala data, dan pelaksanaan mudah, artikel ini akan melaksanakan mvvm
watcher
Prinsip pengikatan dua hala pemerhati data vue
2)Prinsip pengikatan dua hala vue data-wather
3)prinsip mengikat dua hala data vue - parser Complie
prinsip mengikat dua hala data dan pelaksanaan mudah, artikel ini akan melaksanakan vue
's mvvm
Watcher
Pelanggan ialah dan watcher
terutamanya melakukan perkara berikut: Watcher
Observer
1 Menambah dirinya pada pelanggan atribut (Compile
) apabila membuat instantiation sendiri
2. . Ia mesti mempunyai kaedah dep
3. Apabila dimaklumkan tentang perubahan atribut update()
, ia boleh memanggil kaedah
, kemudian lepaskan sendiri. dep.notice()
update()
Compile
Pelanggan harus cache sendiri dan memberitahu pendengar bahawa ia mahu menambahkan saya pada pelanggan. Oleh itu, kita perlu mengubah suai pendengar
// Watcher function Watcher(vm, exp, cb) { this.cb = cb; this.$vm = vm; this.exp = exp; // 此处为了触发属性的getter,从而在dep添加自己,结合Observer更易理解 this.value = this.get(); // 将自己添加到订阅器的操作 } Watcher.prototype = { update: function () { this.run(); // 属性值变化收到通知 }, run: function () { var value = this.get(); // 取到最新值 var oldVal = this.value; if (value !== oldVal) { this.value = value; this.cb.call(this.$vm, value, oldVal); // 执行Compile中绑定的回调,更新视图 } }, get: function () { Dep.target = this; // 将当前订阅者指向自己, 缓存 var value = this.$vm[this.exp]; // 强制触发监听的getter,添加自己到属性订阅器中 Dep.target = null; // 添加完毕,重置释放 return value; }, };
Apabila menginstant
, panggil kaedahfunction defineReactive(data, key, val) { var dep = new Dep() observe(val); // 监听子属性 Object.defineProperty(data, key, { .... get: function() { // 由于需要在闭包内添加watcher,所以可以在Dep定义一个全局target属性,暂存watcher, 添加完移除 Dep.target && dep.addDep(Dep.target); return val; }, .... }); }
semasa melalui Watcher
, dan cetuskan secara paksa. kaedah definisi atributget()
, apabila kaedah Dep.target=watcherInstance
dilaksanakan, tika watcher
semasa akan ditambahkan pada pelanggan atribut getter
, supaya getter
boleh menerima pemberitahuan kemas kini apabila nilai atribut berubah. dep
watcher
PelaksanaanwatcherInstance
Di sini, mula-mula sambungkan pendengarMVVM
dan pendengar
, simulasikan beberapa data dahulu dan laksanakan pengikatan data mudahObserver
Watcher
Anda boleh melihat bahawa jumlah kandungan
<div id="name"></div> <script> function Vue(data, el, exp) { this.data = data; observe(data); el.innerHTML = this.data[exp]; // 初始化模板数据的值 new Watcher(this, exp, function (value) { el.innerHTML = value; }); return this; } var ele = document.querySelector("#name"); var vue = new Vue( { name: "hello world", }, ele, "name" ); setInterval(function () { vue.data.name = "chuchur " + new Date() * 1; }, 1000); </script>
dengan cap masa selepas setiap saat Walaupun ia telah dilaksanakan, ia masih jauh daripada yang dibayangkan. Ia div
bukan hello world
, jadi di sini anda perlu menambah kaedah proksi atribut pada contoh chuchur
, supaya mengakses proksi atribut vue.name
sedang mengakses atribut vue.data.name
Kod yang diubah suai ialah seperti berikut: Vue
vm
vm.data
Kemudian anda boleh mengubah suai data templat secara terus melalui
function Vue(options) { this.$options = options || {}; this.data = this.$options.data; // 属性代理,实现 vm.xxx -> vm.data.xxx var self = this; Object.keys(this.data).forEach(function(key) { self.proxy(key); // 绑定代理属性 }); observe(this.data, this); el.innerHTML = this.data[exp]; // 初始化模板数据的值 new Watcher(this, exp, function(value) { el.innerHTML = value; }); return this; } Vue.prototype = { proxy: function(key) { var self = this; Object.defineProperty(this, key, { enumerable: false, configurable: true, get: function proxyGetter() { return self.data[key]; }, set: function proxySetter(newVal) { self.data[key] = newVal; } }); } }
vue.name
[Tamat]Complie
Pembelajaran yang disyorkan:
Atas ialah kandungan terperinci Artikel untuk memahami prinsip pengikatan dua hala data pemerhati dalam Vue (dengan kod). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Anda boleh menambah fungsi ke butang VUE dengan mengikat butang dalam templat HTML ke kaedah. Tentukan kaedah dan tulis logik fungsi dalam contoh Vue.

Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

Terdapat tiga cara untuk merujuk kepada fail JS dalam vue.js: Secara langsung tentukan jalan menggunakan & lt; skrip & gt; tag ;; import dinamik menggunakan cangkuk kitaran hayat yang dipasang (); dan mengimport melalui Perpustakaan Pengurusan Negeri VUEX.

Pilihan Watch di Vue.js membolehkan pemaju mendengar perubahan dalam data tertentu. Apabila data berubah, tontonkan mencetuskan fungsi panggil balik untuk melakukan paparan kemas kini atau tugas lain. Pilihan konfigurasinya termasuk segera, yang menentukan sama ada untuk melaksanakan panggilan balik dengan serta -merta, dan mendalam, yang menentukan sama ada untuk mendengarkan secara rekursif terhadap objek atau tatasusunan.

Vue.js mempunyai empat kaedah untuk kembali ke halaman sebelumnya: $ router.go (-1) $ router.back () menggunakan & lt; router-link to = & quot;/& quot; Komponen Window.History.Back (), dan pemilihan kaedah bergantung pada tempat kejadian.

Melaksanakan kesan menatal marquee/teks di VUE, menggunakan animasi CSS atau perpustakaan pihak ketiga. Artikel ini memperkenalkan cara menggunakan animasi CSS: Buat teks tatal dan bungkus teks dengan & lt; div & gt;. Tentukan animasi CSS dan tetapkan limpahan: tersembunyi, lebar, dan animasi. Tentukan frasa key, set Transform: TranslateX () pada permulaan dan akhir animasi. Laraskan sifat animasi seperti tempoh, kelajuan tatal, dan arah.

Pagination adalah teknologi yang memisahkan set data besar ke dalam halaman kecil untuk meningkatkan prestasi dan pengalaman pengguna. Di VUE, anda boleh menggunakan kaedah terbina dalam berikut untuk paging: Kirakan jumlah halaman: TotalPages () Traversal Page Number: V-For Directive Untuk menetapkan halaman semasa: CurrentPage Dapatkan data halaman semasa: CurrentPagedata ()

Pemintasan fungsi dalam VUE adalah teknik yang digunakan untuk mengehadkan bilangan kali fungsi dipanggil dalam tempoh masa yang ditentukan dan mencegah masalah prestasi. Kaedah pelaksanaan adalah: mengimport perpustakaan lodash: import {debounce} dari 'lodash'; Gunakan fungsi debounce untuk membuat fungsi memintas: const debouncedfunction = debounce (() = & gt; { / logical /}, 500); Panggil fungsi Intercept, dan fungsi kawalan dipanggil paling banyak sekali dalam 500 milisaat.
