我甚至在change
处理旋转:
<div @change="handleRotate"></div>
<script>
export default {
data: {
rotate = 0
},
methods: {
handleRotate () {
this.rotate = this.rotate + this.getRotateAngle(e.clientX, e.clientY)
}
}
}
</script>
现在,第二个this.rotate
会在每个change
上运行。如何才能在第一次this.rotate
运行时应用第二个handleRotate
?
答案 0 :(得分:12)
您可以使用$once,它只会监听一次事件。
收听自定义事件,但只收听一次。第一次触发时,侦听器将被删除。
您只需将.once
添加到@change
,如下所示:
<div @change.once="handleRotate"></div>
<script>
export default {
//No Change here
}
</script>
在fiddle。
中查看演示旧答案:
如果您不想为rotate
设置初始值,则可以再增加一个变量:hasRotated
来跟踪旋转是否已更改。最初将hasRotated
设置为true,一旦旋转已更改,请将hasRotated
设置为false,如下所示:
<div @change="handleRotate"></div>
<script>
export default {
data: {
rotate: 123,
hasRotated: false
},
methods: {
handleRotate () {
if(this.hasRotated){
this.rotate = this.rotate + this.getRotateAngle(e.clientX, e.clientY)
this.hasRotated = false
}
}
}
}
</script>
答案 1 :(得分:4)
一个简单的解决方案是添加一个像这样的标记:
<script>
export default {
data: {
rotate = 0
},
methods: {
handleRotate () {
if(!this.rotated){
this.rotate = this.rotate + this.getRotateAngle(e.clientX, e.clientY);
this.rotated = true;
}
}
}
}
</script>
当然你需要启动this.rotated as false
答案 2 :(得分:1)
如果rotate
始终为零,您可以执行以下操作:
export default {
data: {
rotate = 0
},
methods: {
handleRotate(e) {
if (this.rotate !== 0) {
return;
}
this.rotate = this.rotate + this.getRotateAngle(e.clientX, e.clientY);
}
}
};