I need event or some workaround how to access currently appended element with v-if
in jQuery with $(".myTarget")
JavaScript
x
17
17
1
var vue = new Vue({
2
el: '#vue',
3
data: {
4
showEl : false,
5
},
6
watch: {
7
showEl: function (newShowEl, oldShowEl) {
8
console.log("Watch event: " + $(".myTarget")[0]);
9
}
10
},
11
methods: {
12
toggleMyTarget: function () {
13
vue.showEl = !vue.showEl;
14
console.log("Toggle on click event: " + $(".myTarget")[0]);
15
}
16
},
17
});
JavaScript
1
10
10
1
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
3
4
<div id="vue">
5
<div v-if="showEl">
6
<span class="myTarget">My element</span>
7
</div>
8
9
<button @click="toggleMyTarget">Toggle element</button>
10
</div>
if I use watch
on showEl
variable it triggers before element renders and I can’t access that element yet. How to achieve to be able to access .myTarget
immediately after it renders?
Advertisement
Answer
Use $nextTick.
JavaScript
1
17
17
1
var vue = new Vue({
2
el: '#vue',
3
data: {
4
showEl : false,
5
},
6
watch: {
7
showEl: function (newShowEl, oldShowEl) {
8
this.$nextTick(() => console.log("Watch event: " + $(".myTarget")[0]))
9
}
10
},
11
methods: {
12
toggleMyTarget: function () {
13
vue.showEl = !vue.showEl;
14
this.$nextTick(() => console.log("Toggle on click event: " + $(".myTarget")[0]))
15
}
16
},
17
});
JavaScript
1
10
10
1
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
2
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
3
4
<div id="vue">
5
<div v-if="showEl">
6
<span class="myTarget">My element</span>
7
</div>
8
9
<button @click="toggleMyTarget">Toggle element</button>
10
</div>