Vue.js 在vueJs中的方法内使用计算属性

Vue.js 在vueJs中的方法内使用计算属性,vue.js,computed-properties,Vue.js,Computed Properties,我正在尝试在vue.js中创建一个shuffle函数。为此,我创建了一个计算属性,然后调用了一个方法。但它不起作用。我又创建了两个函数“add”和“remove”,除了“shuffle”之外,这两个函数运行良好 引发错误:未捕获类型错误:this.moveIndex不是函数 var-app=新的Vue({ el:'根', 数据:{ 任务:[1,8,9], 下次:10 }, 计算:{ moveIndex:函数(数组){ var currentIndex=array.length,randomIn

我正在尝试在vue.js中创建一个shuffle函数。为此,我创建了一个计算属性,然后调用了一个方法。但它不起作用。我又创建了两个函数“add”和“remove”,除了“shuffle”之外,这两个函数运行良好

引发错误:未捕获类型错误:this.moveIndex不是函数

var-app=新的Vue({
el:'根',
数据:{
任务:[1,8,9],
下次:10
},
计算:{
moveIndex:函数(数组){
var currentIndex=array.length,randomIndex,tempVal;
对于(var i=currentIndex-1;i>0;i--){
randomIndex=Math.floor(Math.random()*currentIndex);
tempVal=数组[i];
数组[i]=数组[randomIndex];
数组[randomIndex]=tempVal;
}
返回数组;
}
},
方法:{
randIndex:function(){
返回Math.floor(Math.random()*this.tasks.length);
},
添加:函数(){
this.tasks.splice(this.randIndex(),0,this.nextNum++)
},
删除:函数(){
this.tasks.splice(this.randIndex(),1)
},
shuffle:function(){
var arr=this.tasks;
arr=此.moveIndex(arr)
}
}
});
.bar进入活动状态,.bar保持活动状态{
过渡:所有1;
}
.bar输入,.bar离开到{
不透明度:0;
转换:translateY(30px)
}
.酒吧搬家{
转换:转换1s
}
.数字{
右边距:10px;
显示:内联块
}

添加
去除
洗牌
{{task}}
只是返回一个值并依赖于其他反应性属性的getter函数

1。您的计算属性
moveIndex
只是在修改数组数据属性,即
this.tasks
。因此,只需使用一种方法即可

2。您正试图使用索引直接修改
this.tasks
数组的一项。Vue无法检测到

因此,使用or代替

以下是变化:

var app = new Vue({
  el: "#root",
  data: {
    tasks: [1, 8, 9],
    nextNum: 10
  },
  methods: {
    randIndex: function() {
      return Math.floor(Math.random() * this.tasks.length);
    },
    add: function() {
      this.tasks.splice(this.randIndex(), 0, this.nextNum++);
    },
    remove: function() {
      this.tasks.splice(this.randIndex(), 1);
    },
    shuffle: function() {
      var array = this.tasks;
      var currentIndex = this.tasks.length;
      var randomIndex;
      var tempVal;

      for (var i = currentIndex - 1; i > 0; i--) {
        randomIndex = Math.floor(Math.random() * currentIndex);
        tempVal = array[i];
        this.$set(array, i, array[randomIndex]);
        this.$set(array, randomIndex, tempVal);
      }
    }

  }
});

这里有一个

您不能将计算属性作为函数调用。它们是属性()。如果你想要一个函数,把它移动到方法中,你就可以这样调用它。我看不出一个理由说明
moveIndex
作为一个计算函数有什么意义。把它放到方法中。这也是一个典型的例子。