Откройте DevTools и посмотрите на элемент canvas
.Сначала вы увидите, что его ширина и высота (не стили ширины и высоты) установлены на 0
, затем измените размер окна, вы увидите, что ширина и высота изменяются на некоторые значения, и это работает.
На VueSignaturePad.js .посмотрите resizeCanvas
методы
canvas.width = canvas.offsetWidth * ratio;
canvas.height = canvas.offsetHeight * ratio;
Когда смонтирован v-dialog
, а затем смонтирован VueSignaturePad
.resizeCanvas
вызывается один раз в mounted
, и в этот момент каким-то образом холст не имеет ширины и высоты (из-за своего родителя), поэтому он устанавливает эти значения на 0
.После изменения размера окна оно будет вызываться снова и обновлять эти значения.
Один из способов решить эту проблему - просто вызвать resizeCanvas
после завершения родительского рендеринга.
this.$nextTick(() => {
this.$refs.signaturePad.resizeCanvas();
})
См. codesandbox .
Примечание: resizeCanvas
не является официальным методом.