在JS中如何同步修改vue中的變量
JS中同步修改vue中的變量
問題
在處理一個功能上遇到一個問題:在vue組件中,引入了一個JS文件,在JS文件動態(tài)創(chuàng)建了一些DOM節(jié)點,需要偵測dom節(jié)點中內(nèi)容的變化同時改變vue中組件的內(nèi)容。
思考
因為它是單獨的一個JS文件,里面動態(tài)生成的dom可以通過oninput來偵測輸入內(nèi)容的變化,但要實時更新到vue組件中,那只能找他們的連接點或者搭橋(借助vuex、localStorage這些全局變量),想著可以利用對象類型,因為其是將引用放在堆中,真正的值存放在棧中,通過傳遞其引用作為橋梁來達到JS文件中修改vue中值的效果。
解決
通過上述方式并不利于今后維護,其實我們可以巧妙利用閉包達到目的,這組件中定義需要修改的方法,通過在JS調(diào)用該該方法來達到修改vue組件變量的目的。
vue中如下:
<template>
<div class="about" id="about">
{{text}}
</div>
</template>
<script>
import Test from './test'
export default {
name: 'About',
data () {
return {
text: 'gg'
}
},
mounted () {
const test = new Test(
{
hooks: {
input: value => this.text = value
}
}
)
}
}
</script>類中方法
export default class Test {
constructor(props = {}) {
this.options = Object.assign({
mode: 'write'
}, props)
this.create()
}
create() {
let about = document.getElementById('about')
let div = document.createElement('div')
div.innerHTML = '<input type="text" id="inputText">'
about.appendChild(div)
let input = document.getElementById('inputText')
input.addEventListener('input', () => {
this.options.hooks.input(input.value)
})
}
}vue.js修改賦值變量問題
最近使用vue.js發(fā)現(xiàn)修改賦值的變量,原變量的數(shù)據(jù)也隨之改變了。
例子
const app = new Vue({
?? ??? ??? ?el: '#app',
?? ??? ??? ?data: {
?? ??? ??? ??? ?list:[1,2,3],
?? ??? ??? ?},
?? ??? ??? ?methods: {
?? ??? ??? ??? ?test() {
?? ??? ??? ??? ??? ?let temp = this.list; // 將list賦值給了temp
?? ??? ??? ??? ??? ?temp = [1,2], // temp發(fā)生改變
?? ??? ??? ??? ??? ?console.log(temp); // 打印結(jié)果 [1,2]
?? ??? ??? ??? ??? ?console.log(this.list); // 打印結(jié)果 [1,2]
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?});解決方案
const app = new Vue({
?? ??? ??? ?el: '#app',
?? ??? ??? ?data: {
?? ??? ??? ??? ?list:[1,2,3],
?? ??? ??? ?},
?? ??? ??? ?methods: {
?? ??? ??? ??? ?test() {
?? ??? ??? ??? ??? ?let temp = JSON.parse(JSON.stringify(this.list)); // 將list賦值給了temp
?? ??? ??? ??? ??? ?temp = [1,2], // temp發(fā)生改變
?? ??? ??? ??? ??? ?console.log(temp); // 打印結(jié)果 [1,2]
?? ??? ??? ??? ??? ?console.log(this.list); // 打印結(jié)果 [1,2,3]
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?});原因:
在vue中,數(shù)組和對象傳遞都是引用傳遞。賦值時傳遞的并不是值,而是指向了同一個空間。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在vue-cli的組件模板里使用font-awesome的兩種方法
今天小編就為大家分享一篇在vue-cli的組件模板里使用font-awesome的兩種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
Vue echart實現(xiàn)柱狀圖,電池圖,3D柱圖和3D圓柱圖代碼詳解
這篇文章主要為大家介紹了Vue實現(xiàn)echart繪圖代碼詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
vue3+vite引入插件unplugin-auto-import的方法
這篇文章主要介紹了vue3+vite引入插件unplugin-auto-import的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值?,需要的朋友可以參考下2022-10-10
淺析Vue3中通過v-model實現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡化父子組件雙向綁定
這篇文章主要介紹了淺析Vue3中通過v-model實現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡化父子組件雙向綁定,需要的朋友可以參考下2022-12-12
Vue中狀態(tài)管理器(vuex)詳解以及實際應用場景
Vuex是一個專為Vue.js應用程序開發(fā)的狀態(tài)管理模式,下面這篇文章主要給大家介紹了關(guān)于Vue中狀態(tài)管理器(vuex)詳解以及實際應用場景的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11

