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>
看到另一種寫法
要簡單一點(diǎn),不需要借助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屬性進(jìn)行操作時,盡量不要對其直接操作
比如下面代碼:
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渲染動畫放進(jìn)去,全部使用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)連線效果(支持滑動連線和點(diǎn)擊連線)
jsPlumb 是一個比較強(qiáng)大的繪圖組件,它提供了一種方法,主要用于連接網(wǎng)頁上的元素。本文將利用jsPlumb實現(xiàn)連線效果,同時支持滑動連線和點(diǎn)擊連線,感興趣的可以了解一下2023-01-01vue.js 實現(xiàn)圖片本地預(yù)覽 裁剪 壓縮 上傳功能
這篇文章主要介紹了vue.js 實現(xiàn)圖片本地預(yù)覽裁剪壓縮上傳功能,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-03-03vue elementUI使用tabs與導(dǎo)航欄聯(lián)動
這篇文章主要為大家詳細(xì)介紹了vue elementUI使用tabs與導(dǎo)航欄聯(lián)動,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06