调用简单方法后VueJS更新Dom不起作用

Posted

技术标签:

【中文标题】调用简单方法后VueJS更新Dom不起作用【英文标题】:VueJS Update Dom After Calling Simple Method Not Working 【发布时间】:2018-03-18 02:21:33 【问题描述】:

我想在单击按钮时动态更改按钮的颜色。因此,我添加了一个自定义类“活动”,仅当属性 isActive 设置为 true 时才应分配该类。单击时,我想调用一个将属性更改为 true 的方法,然后更新 dom 以添加自定义类。任何帮助表示赞赏;)

<div v-for="(funktion, index) in funktions">
          <button class="btn btn-default wordcloud" 
                  :class=" 'custom-active': funktion.isActive " 
                  @click="activate(index)">funktion.name</button>
</div>

方法正确更新数据但dom不更新

export default 

  data() 
    return 
      funktions: [
          
            name: "finanzen",
            isActive: false
          ,
          
            name: "management",
            isActive: false
          ,
          
            name: "testfield",
            isActive: false
           ,
       ],
    ;
  ,
  methods: 
    activate(index)
        this.funktions[index].isActive = true;
    ,
;

【问题讨论】:

【参考方案1】:

您没有将索引传递给activate 回调。将其更改为:

@click="activate(index)">funktion.name</button>

如果您在控制台中查看,您会看到一个异常,因为您正在尝试访问具有非数字的数组项。

new Vue(
  el: '#app',
  data() 
    return 
      funktions: [
          
            name: "finanzen",
            isActive: false
          ,
          
            name: "management",
            isActive: false
          ,
          
            name: "testfield",
            isActive: false
           ,
       ],
    ;
  ,
  methods: 
    activate(index)
        this.funktions[index].isActive = true;
    ,
	,
)
.custom-active 
  background-color: red;
<script src="https://unpkg.com/vue"></script>

<div id="app">
  <div v-for="(funktion, index) in funktions">
    <button class="btn btn-default wordcloud" 
      :class=" 'custom-active': funktion.isActive " 
      @click="activate(index)">funktion.name</button>
  </div>
</div>

【讨论】:

对不起,我已经这样做了,这是问题的错误,我会编辑。还有其他想法吗? 那么我不确定你在问什么,因为你的代码已经在点击时添加了活动类? 点击后数据会正确更改,但 Dom 不会更新。如果我手动将“isActive”更改为 true,则在重新加载时会正确分配类 dom 对我来说更新得很好 什么鬼?好吧,不能与之争论,那就不知道了

以上是关于调用简单方法后VueJS更新Dom不起作用的主要内容,如果未能解决你的问题,请参考以下文章

VueJS 插槽:为啥通过父插槽传入的子方法不起作用?

在 vueJs 中使用计算属性中的方法

为啥我对控制器方法的简单 ajax 调用不起作用?

我扩展 QApplication 并在 exec_ 后调用一个方法不起作用

简单的 Nokogiri 不起作用:“Nokogiri”的未定义方法调用

在 VUEJS 2 中没有括号的测试不起作用