Mam element vue.js, który używa elementu <transition>
do animowania hide/show.Jak mogę wyłączyć przejścia vue.js do testów?
Aby przyspieszyć testy, chciałbym wyłączyć animację. Jak mogę to zrobić?
* { transition: none !important }
zasugerowano tutaj: https://github.com/vuejs/vue/issues/463, ale nie robi się różnicy.
Utworzyłem skrzypce tutaj: https://jsfiddle.net/z11fe07p/2268/
Running "test" ostatnie wyjście jest "3. Wyświetlacz powinien być "none", to jest: block". Jeśli zwiększę limit czasu do 100 lub usunę element <transition>
, otrzymam oczekiwane wyjście "3. Wyświetlacz powinien być" none ", to jest: none"
Jak mogę wyłączyć animację, aby móc pozbyć się połączeń setTimeout
?
EDIT:
Próbowałem usunięcie wszystkich css stylizacji, ale nadal mają ten sam problem. Problem pojawia się po prostu mając element <transition>
.
EDIT 2:
Aktualizacja skrzypce nie stylizacja, tylko element <transition>
. Uwzględniono również połączenia z numerem $nextTick()
, aby upewnić się, że nie był to powód, dla którego zachowywał się dziwnie.
Zmień wywołanie wait100
do wait10
zamiast a zobaczysz test rozpocznie braku
https://jsfiddle.net/z11fe07p/2270/
edit 3:
oddanie przykładowy kod tutaj, więc jest to łatwiejsze dla wszystkich, aby baw się z :)
new Vue({
el: '#app',
template: `
<span>
<button @click="test()">Run test</button>
<transition>
<p v-show="show">Hello, world!</p>
</transition>
</span>
`,
data() {
return {
show: false,
};
},
methods: {
test() {
const wait10 = _ => new Promise(resolve => setTimeout(resolve, 10));
const wait100 = _ => new Promise(resolve => setTimeout(resolve, 100));
const showParagraph = _ => this.show = true;
const hideParagraph = _ => this.show = false;
const p = document.querySelector('p');
showParagraph();
this.$nextTick()
.then(wait10)
.then(() => {
const display = getComputedStyle(p).display;
assertEqual(display, 'block');
})
.then(hideParagraph)
.then(this.$nextTick)
.then(wait100)
.then(() => {
const display = getComputedStyle(p).display;
assertEqual(display, 'none');
});
}
}
});
function assertEqual(a, b) {
if (a !== b) {
console.error('Expected "' + a + '" to equal "' + b + '"');
}
};
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
<div id="app"></div>
Dla mnie to działa za każdym razem, co mówi mi, że nadal nie rozumiem, naprawdę, co się tu dzieje . To jeden z powodów, dla których nie chcę wybrać tego jako akceptowanej odpowiedzi. Przepraszam. – Tobbe
Poza tym nie lubię zabrudzić mojego szablonu materiałem, który jest tam tylko do testowania. Czy istnieje jakiś sposób na dodanie tych rekwizytów z mojego kodu testowego? – Tobbe
Zaktualizowano z kilkoma wyjaśnieniami na temat różnych wyników. –