【问题标题】:Vue.js Not updating the class css items when data changes数据更改时,Vue.js 不更新类 css 项
【发布时间】:2018-07-20 18:10:04
【问题描述】:

当数据更改时,我在更新显示的类时遇到问题。

我有一个服务器数组,它每 10 秒调用一次以获取服务器状态。如果数据发生变化,数据会发生变化,但类不会发生变化

没有改变的部分是根据状态显示字体真棒图标 'fas fa-exclamation-triangle critical' : 'fas fa-check ok'">

文本确实改变了 {{server.status}},只是 if 语句中的 font-awesome 类没有改​​变。

关于我需要更改什么以使其正确显示有什么想法吗?

<tr v-for="server in servers">
    <td>
      {{server.name}}
      <a v-bind:href="server.url" target="_blank">{{server.url}}</a>
    </td>
    <td style="min-width: 125px">
      <i :class="server.status === 'CRITICAL' ? 'fas fa-exclamation-triangle critical' : 'fas fa-check ok'"></i>
      {{server.status}}
    </td>
    <td>{{server.revision}}</td>
    <td>{{server.notify}}</td>
    <td>{{server.count}}</td>

  </tr>

    <script>
  import axios from 'axios'

  export default {
    name: 'ServerMonitor',
    data() {
      return {
        servers: []
      }
    },
    created() {
      this.fetchData();
    },
    mounted: function () {
      setInterval(function () {
        this.fetchData();
      }.bind(this), 10000)
    },
    methods: {
      fetchData() {
        axios.get('https://SERVER/serverinfo')
          .then((resp) => {
            this.servers = resp.data[0].servers;
          })
          .catch((err) => {
            console.log(err);
          })
      }
    }
  }
</script>

我也试过没有这样的 :class:

<i v-if="server.status === 'CRITICAL'" class="fas fa-exclamation-triangle critical"></i>
<i v-if="server.status === 'OK'" class="fas fa-check ok"></i>

【问题讨论】:

  • 你确定server.status 是否等于'CRITICAL'?你有没有在模板外检查过?
  • 是的,我有“CRITICAL”和“OK”的混合反应。他们最初工作得很好。问题是当它在 10 秒后再次拨打电话并且它发生变化时。文字发生了变化,但字体很棒的图像没有
  • 你应该有一个:key
  • 这似乎是与字体真棒有关的问题。我刚刚对其进行了测试,似乎&lt;i class="something"&gt;&lt;/i&gt; 在页面上呈现为 svg,因此它不依赖于组件数据。我还不确定如何避免这种情况。
  • 是的,显然你必须为 Vue 使用不同的 Font Awesome 库,正如他们在文档中推荐的那样:fontawesome.com/how-to-use/js-component-packages

标签: vue.js


【解决方案1】:

Vue's v-bind:class 接受对象或数组而不是字符串,这可能是您的问题。

   <td style="min-width: 125px">
      <i :class="['fas', server.status === 'CRITICAL' ? 'fa-exclamation-triangle critical' : 'fa-check ok']"></i>
      {{server.status}}
   </td>

根据下面的 cmets 更新我的答案:

你需要使用 font-awesome Vue 组件。正在发生的事情是 FontAwesome 将 &lt;i&gt; 图标转换为 SVG 一次,并且不会在将来的任何时候重新渲染它们。

编辑 2 或者,您可以使用 v4 升级 shim:

&lt;script defer src="https://use.fontawesome.com/releases/v5.0.6/js/v4-shims.js"&gt;&lt;/script&gt;

https://jsfiddle.net/6tfqp4nb/12/

【讨论】:

【解决方案2】:

如果你在js中使用font-awesome,你可以试试这个:

FontAwesomeConfig = { autoReplaceSvg: 'nest' }

文档:https://fontawesome.com/how-to-use/svg-with-js#auto-replace-svg-nest

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 2023-02-15
    • 2018-08-16
    • 2022-01-18
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多