vue中css如何使用data中的變量
vue css使用data中的變量
封裝一個ui組件,組件的樣式一般是多種多樣的
我們可以通過組件傳值的方式將ui屬性傳遞給組件,但是我們屬性是在js中可以拿到,vue3之前css是無法直接獲取的
(vue3中已經(jīng)可以直接獲取,可以去學(xué)習(xí)一下) 通過vars
那么在vue2中,我們要借助setProperty函數(shù)
寫一個簡單的例子
<template>
<div class="home" ref="UI">
<div class="header">hello world</div>
</div>
</template>
<script>
export default {
data () {
return {
color: 'red'
}
},
mounted(){
this.setUI()
},
methods:{
setUI(){
this.$refs.UI.style.setProperty("--color",this.color);//給變量賦值
}
}
}
</script>
<style>
.home{
.header{
color: var(--color); //使用變量
}
}
</style>看到另一種寫法
要簡單一點,不需要借助setProperty函數(shù)
<template>
<div class="home" :style="myStyle">
<div class="header">hello world</div>
</div>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
data () {
return {
color: 'red'
}
},
computed: {
myStyle () :object{
return {
"--color": this.color,
}
}
},
})
</script>
<style>
.home{
.header{
color: var(--color); //使用變量
}
}
</style>vue中data變量使用的注意事項
因為在Vue中,data中的屬性往往都是用于雙向綁定,所以Vue會對其有劫持,所以我們在對data屬性進行操作時,盡量不要對其直接操作
比如下面代碼:
export default {
data() {
return {
list: []
}
},
methods: {
init() {
for(let i = 0; i < 1000; i++) {
this.list.push({
key: i,
name: '張三'
});
}
console.log(this.list);
}
},
created() {
this.init();
}
}
最終打印結(jié)果如下:

可以看到包含一個Observer屬性,這是Vue自動加上的。
上面代碼不斷向this.list中添加數(shù)據(jù),這樣會造成過度數(shù)據(jù)劫持,造成邏輯處理速度極慢(取值同樣如此),可能我們在平時的代碼上感受不到,如果將一個比較復(fù)雜的canvas渲染動畫放進去,全部使用this屬性就會發(fā)現(xiàn)canvas渲染非??D。
所以我們將init中代碼改成:
const list = [];
for(let i = 0; i < 1000; i++) {
list.push({
key: i,
name: '張三'
});
}
this.list = list;
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue+jsPlumb實現(xiàn)連線效果(支持滑動連線和點擊連線)
jsPlumb 是一個比較強大的繪圖組件,它提供了一種方法,主要用于連接網(wǎng)頁上的元素。本文將利用jsPlumb實現(xiàn)連線效果,同時支持滑動連線和點擊連線,感興趣的可以了解一下2023-01-01
vue.js 實現(xiàn)圖片本地預(yù)覽 裁剪 壓縮 上傳功能
這篇文章主要介紹了vue.js 實現(xiàn)圖片本地預(yù)覽裁剪壓縮上傳功能,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-03-03
vue elementUI使用tabs與導(dǎo)航欄聯(lián)動
這篇文章主要為大家詳細介紹了vue elementUI使用tabs與導(dǎo)航欄聯(lián)動,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06

