Vue 仅在组件加载时绑定类

Posted

技术标签:

【中文标题】Vue 仅在组件加载时绑定类【英文标题】:Vue bind class only on component load 【发布时间】:2021-07-04 20:59:56 【问题描述】:

我有一个多部分的表单 UI,每个部分都可以折叠。我想在加载时应用类,这样如果所有问题都已在一个部分中填写,则在加载表单组件时该部分会折叠,但类绑定(单独 - 在每个部分中我使用v-model,所以v-once 不是一个选项)不是反应性的(也就是说,当用户填写该部分中的所有问题时,它不会自动折叠)

有没有明智的方法来实现这一点?

【问题讨论】:

发布您的代码。 【参考方案1】:

您可以使用计算属性或方法来解决这个问题。

使用计算属性:

...
  computed: 
    collapsed() 
      return this.foo && this.bar
    
  
...
<div class='content' :class=' collapsed '>
  ...
</div>

Example

使用方法:

...
  methods: 
    computeCollapsed(inputs) 
      return inputs.every(x => x)
    
  
...
<div class='content' :class=' collapsed: computeCollapsed([foo, bar]) '>
  ...
</div>

Example

相比之下,只要发生重新渲染,方法调用将始终运行该函数。

来源Computed Caching vs Methods

如果你只有几个部分并且部分的数量是固定的,你应该使用计算属性而不是方法。

【讨论】:

【参考方案2】:

我最终克隆了非响应式的初始数据和道具,并使用它来设置初始状态。

【讨论】:

以上是关于Vue 仅在组件加载时绑定类的主要内容,如果未能解决你的问题,请参考以下文章

仅在一个 Vue 组件中包含外部 CSS 库

Vue3 中使用 defineAsyncComponent 延迟加载组件

vue组件class绑定

mount() 仅在组件 Vue.js 上运行一次

从 vue 中的子组件控制一个 prop 类

如何仅在父组件完全挂载时挂载 vue js 子组件-我正在使用 $refs