Ваш код
<input type="email" :class="{ invalid: submitted && $v.email.$error }">
Проблема здесь, даже если вы определили $ v в своем локальном штате, Vue не может найти его. Попробуйте определить свое местное состояние в свойстве data без предшествующего знака доллара. Потому что $ несет в Vue дополнительное значение.
Обычно $ означает свойства экземпляра, такие как data , el , root , children и т. Д.
Например, чтобы получить доступ к элементу, на котором смонтирован экземпляр Vue, вы можете использовать this. $ El .
Таким образом, вы можете изменить свой код следующим образом -
<input type="email" :class="{ invalid: submitted && $data.$v.email.$error }">