为了账号安全,请及时绑定邮箱和手机立即绑定

Vue.js 动态 <style> + 变量

Vue.js 动态 <style> + 变量

一只斗牛犬 2023-10-30 20:54:27
我想将动态变量传递给样式,这可能吗?我尝试了这种方法,但没有成功::style="{'width':`${parseInt(100 * task.progress)}`% ;}"这是我的task.vue: <tr  v-for="task in tasks.data "  v-if=" task.projet_id == key "   :key="task.id">       <td >{{ parseInt(100 * task.progress) }}% <div class="progress">       <div class="progress-bar bg-success" role="progressbar" aria-valuenow="0" :style="         {'width':`${parseInt(100 * task.progress)}`% ;}"  id="progress"        aria-valuemin="`${parseInt(100 * task.progress)}`" aria-valuemax="100"></div>       </div>                    </td>
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

肯定有一种方法可以满足您的需求,我为您链接了一个演示。

让我们看得更深入

我们可以看一下你的v-bind语法

<div class="progress-bar bg-success" role="progressbar" aria-valuenow="0" :style=" 

        {'width':`${parseInt(100 * task.progress)}`% ;}"  id="progress" 

       aria-valuemin="`${parseInt(100 * task.progress)}`" aria-valuemax="100"></div>

       </div>     

我会稍微简化一下


<div 

    :style="{'width':`${parseInt(100 * task.progress)}`% ;}">

</div>

在这里我可以看到你已经绑定 styleexpression

{'width':`${parseInt(100 * task.progress)}`% ;}

我们可以看到您正在创建一个Object带有键的值width,而谁的值是另一个expression

`${parseInt(100 * task.progress)}`%

在这里我们看到了模板文字的使用,这是普通 JavaScript 的一个功能。

模板文字用反引号 (` `) 括起来

模板文字可以包含占位符

[占位符] 由美元符号和大括号表示 (${表达式})

当 javascript 看到 this 语法时,就会对 theexpression进行求值,这就是我们发现第一个语法错误的地方

//In

`${parseInt(100 * task.progress)}`%


//The expression is "parseInt(100 * task.progress)"

//simplifying we get

`${expression}`%


//and we know that `${expression}` is a string

现在可能更容易看出

"string"%

没有语法意义。解决方案?把% 里面template literal

`${parseInt(100 * task.progress)}%`

足够简单

向后移动

{'width':`${parseInt(100 * task.progress)}`% ;}

可以改为

{'width':`${parseInt(100 * task.progress)}%` ;}

;不属于object. 例如,{'attr':'1';}无效。这给我们留下了

{'width':`${parseInt(100 * task.progress)}%`}

结尾

作为对读者的挑战,这相当于

:style="{'width':parseInt(100 * task.progress)}+'%'}"

提供的链接应该足以帮助理解。

TLDR:您有一个语法错误;:style="{'width':`${parseInt(100 * task.progress)}%`}"作品


查看完整回答
反对 回复 2023-10-30
?
慕斯709654

TA贡献1840条经验 获得超5个赞

除了一些语法错误之外,它看起来不错:

:style="{'width': `${parseInt(100 * progress)}%`}"
  • 绑定是到一个对象,所以 a;会不合适

  • 需要%在字符串内部


查看完整回答
反对 回复 2023-10-30
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

是的,可以在里面添加变量style。在你的情况下%应该在引号内。


<tr  v-for="task in tasks.data "  v-if=" task.projet_id == key "   :key="task.id">

       <td >{{ parseInt(100 * task.progress) }}% <div class="progress">

       <div class="progress-bar bg-success" role="progressbar" aria-valuenow="0" :style=" 

        {'width':`${parseInt(100 * task.progress)}%`}"  id="progress" 

       aria-valuemin="`${parseInt(100 * task.progress)}`" aria-valuemax="100"></div>

       </div>             

</td>

添加样式时不需要包含;,因为样式数据是一个对象,并且将commas像这样分隔


:style="{'width':`${parseInt(100 * task.progress)}%`, color:'red'}"


查看完整回答
反对 回复 2023-10-30
  • 3 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信