Как запустить метод vue только один раз, а не каждый раз
я обрабатываю поворот даже на 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
работает?
3 ответов
решение его Vue путь:
можно использовать $один раз, который будет слушать события, но только один раз.
слушайте пользовательское событие, но только один раз. Прослушиватель будет удален, как только он запускается в первый раз.
вам просто нужно добавить .once
to @change
следующее:
<div @change.once="handleRotate"></div>
<script>
export default {
//No Change here
}
</script>
Проверьте демо, если это в скрипка.
старый Ответ:
если вы не хотите иметь начальное значение для rotate
, вы можете иметь еще одну переменную:hasRotated
чтобы отслеживать, был ли изменен поворот или нет. Изначально установлено hasRotated
в true, как только поворот был изменен set 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>
одним из простых решений было бы добавить маркер примерно так:
<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>
конечно, вам нужно будет инициировать это.поворачивается как false
Если rotate
начать всегда с нуля вы можете сделать:
export default {
data: {
rotate = 0
},
methods: {
handleRotate(e) {
if (this.rotate !== 0) {
return;
}
this.rotate = this.rotate + this.getRotateAngle(e.clientX, e.clientY);
}
}
};