基于数字

时间:2017-07-16 04:01:42

标签: javascript css vue.js vuejs2

我有以下HTML:

<td v-bind:class="getClass()" class="metric-cell vs-last-week">
{{ (((metrics.twitter.engagements.thisWeek - metrics.twitter.engagements.lastWeek) / metrics.twitter.engagements.lastWeek)*100).toFixed(1) + "%" }}
</td>

有没有办法获取单元格中的值,以便我可以在getClass()中处理它,如果它是正数,则将颜色更改为绿色?

我知道我可能会创建一个实际处理数据的方法,而不是丑陋的内联表达式,然后用它来重新计算getClass()并检查正/负,但我想知道它是否可能从<td>中获取值,然后进行比较而不重新计算并返回正确的类名。

2 个答案:

答案 0 :(得分:1)

通常,只要我想保存计算值,我就创建一个新范围。在Vue中执行此操作的方法是一个组件。

Vue.component("metric", {
  props:["metric"],
  template:`
    <td :class="getClass()">{{metric}}</td>
  `,
  methods:{
    getClass(){
      return {
        green: this.metric >= 0,
        red: this.metric < 0
      }
    }
  }
})

然后你就可以在你的表中使用它:

<td is="metric" :metric="(((metrics.twitter.engagements.thisWeek - metrics.twitter.engagements.lastWeek) / metrics.twitter.engagements.lastWeek)*100)"></td>

答案 1 :(得分:0)

如果将大部分复杂计算从模板中移出并转换为如下计算属性,则可能更容易阅读:

<td :class="cssClass" class="metric-cell vs-last-week">
  {{ (vsLastWeek * 100).toFixed(1) + '%' }}
</td>
computed: {
  vsLastWeek() {
    const thisWeek = this.metrics.twitter.engagements.thisWeek;
    const lastWeek = this.metrics.twitter.engagements.lastWeek;
    return (thisWeek - lastWeek) / lastWeek;
  },

  cssClass() {
    if (this.vsLastWeek > 0.9) {
      return 'some-class';
    }
  },
}