View not updating even the html changed
up vote
-2
down vote
favorite
I used Vuejs, and the following code is from a function under the methods property.
I try to manipulate the DOM inside a promise, where I retrieve info from the database and use that info as a selector:
.then(() =>{
for (var i in obj){
for (var j in obj[i]){
document.getElementById(i + j).style.display = 'none';
}
}
})
I tried both jquery and js, and log them out to see if they selected the right element, and they did print out the correct element that I want to manipulate, however, when I try to addClass() removeClass() or hide(), even though these actions are executed successfully(I verified it by logging out the changed element), they are not updated in the view, when I set the display property as "none", and I checked the HTML code, these elements are not in the HTML, but they are displayed normally in the view.
I wonder why this happened, and wanted to know if there's a proper way to update the view as well, thank you.
javascript html dom vue.js
add a comment |
up vote
-2
down vote
favorite
I used Vuejs, and the following code is from a function under the methods property.
I try to manipulate the DOM inside a promise, where I retrieve info from the database and use that info as a selector:
.then(() =>{
for (var i in obj){
for (var j in obj[i]){
document.getElementById(i + j).style.display = 'none';
}
}
})
I tried both jquery and js, and log them out to see if they selected the right element, and they did print out the correct element that I want to manipulate, however, when I try to addClass() removeClass() or hide(), even though these actions are executed successfully(I verified it by logging out the changed element), they are not updated in the view, when I set the display property as "none", and I checked the HTML code, these elements are not in the HTML, but they are displayed normally in the view.
I wonder why this happened, and wanted to know if there's a proper way to update the view as well, thank you.
javascript html dom vue.js
you could achieve the traditional javascript functionalities using only Vue
– Boussadjra Brahim
Nov 20 at 0:40
2
Yes, don't directly manipulate the DOM like that. You're supposed to change the state of the Vue component, and write your template accordingly.
– Chris G
Nov 20 at 0:43
I tried almost the same thing in another function which is triggered by a @click , it works perfectly, so confused.
– Sayakura
Nov 20 at 0:48
Again, don't do this. You're using Vue, and supposed to adhere to its patterns. Use two nestedv-forloops in your template and render the elements conditionally.
– Chris G
Nov 20 at 0:53
add a comment |
up vote
-2
down vote
favorite
up vote
-2
down vote
favorite
I used Vuejs, and the following code is from a function under the methods property.
I try to manipulate the DOM inside a promise, where I retrieve info from the database and use that info as a selector:
.then(() =>{
for (var i in obj){
for (var j in obj[i]){
document.getElementById(i + j).style.display = 'none';
}
}
})
I tried both jquery and js, and log them out to see if they selected the right element, and they did print out the correct element that I want to manipulate, however, when I try to addClass() removeClass() or hide(), even though these actions are executed successfully(I verified it by logging out the changed element), they are not updated in the view, when I set the display property as "none", and I checked the HTML code, these elements are not in the HTML, but they are displayed normally in the view.
I wonder why this happened, and wanted to know if there's a proper way to update the view as well, thank you.
javascript html dom vue.js
I used Vuejs, and the following code is from a function under the methods property.
I try to manipulate the DOM inside a promise, where I retrieve info from the database and use that info as a selector:
.then(() =>{
for (var i in obj){
for (var j in obj[i]){
document.getElementById(i + j).style.display = 'none';
}
}
})
I tried both jquery and js, and log them out to see if they selected the right element, and they did print out the correct element that I want to manipulate, however, when I try to addClass() removeClass() or hide(), even though these actions are executed successfully(I verified it by logging out the changed element), they are not updated in the view, when I set the display property as "none", and I checked the HTML code, these elements are not in the HTML, but they are displayed normally in the view.
I wonder why this happened, and wanted to know if there's a proper way to update the view as well, thank you.
javascript html dom vue.js
javascript html dom vue.js
edited Nov 20 at 0:44
asked Nov 20 at 0:34
Sayakura
23
23
you could achieve the traditional javascript functionalities using only Vue
– Boussadjra Brahim
Nov 20 at 0:40
2
Yes, don't directly manipulate the DOM like that. You're supposed to change the state of the Vue component, and write your template accordingly.
– Chris G
Nov 20 at 0:43
I tried almost the same thing in another function which is triggered by a @click , it works perfectly, so confused.
– Sayakura
Nov 20 at 0:48
Again, don't do this. You're using Vue, and supposed to adhere to its patterns. Use two nestedv-forloops in your template and render the elements conditionally.
– Chris G
Nov 20 at 0:53
add a comment |
you could achieve the traditional javascript functionalities using only Vue
– Boussadjra Brahim
Nov 20 at 0:40
2
Yes, don't directly manipulate the DOM like that. You're supposed to change the state of the Vue component, and write your template accordingly.
– Chris G
Nov 20 at 0:43
I tried almost the same thing in another function which is triggered by a @click , it works perfectly, so confused.
– Sayakura
Nov 20 at 0:48
Again, don't do this. You're using Vue, and supposed to adhere to its patterns. Use two nestedv-forloops in your template and render the elements conditionally.
– Chris G
Nov 20 at 0:53
you could achieve the traditional javascript functionalities using only Vue
– Boussadjra Brahim
Nov 20 at 0:40
you could achieve the traditional javascript functionalities using only Vue
– Boussadjra Brahim
Nov 20 at 0:40
2
2
Yes, don't directly manipulate the DOM like that. You're supposed to change the state of the Vue component, and write your template accordingly.
– Chris G
Nov 20 at 0:43
Yes, don't directly manipulate the DOM like that. You're supposed to change the state of the Vue component, and write your template accordingly.
– Chris G
Nov 20 at 0:43
I tried almost the same thing in another function which is triggered by a @click , it works perfectly, so confused.
– Sayakura
Nov 20 at 0:48
I tried almost the same thing in another function which is triggered by a @click , it works perfectly, so confused.
– Sayakura
Nov 20 at 0:48
Again, don't do this. You're using Vue, and supposed to adhere to its patterns. Use two nested
v-for loops in your template and render the elements conditionally.– Chris G
Nov 20 at 0:53
Again, don't do this. You're using Vue, and supposed to adhere to its patterns. Use two nested
v-for loops in your template and render the elements conditionally.– Chris G
Nov 20 at 0:53
add a comment |
2 Answers
2
active
oldest
votes
up vote
0
down vote
You're missing style. document.getElementById(i + j).style.display = 'none';
As an aside, you can and should really do this through Vue using the data object. Vue is data oriented and its reactivity works using data, computed, etc. Directly manipulating the DOM as you are doing will bypass any reactivity.
it still doesnt work, as I said, I also tried .hide() with jquery, and they all worked if you just look at the changed html code.
– Sayakura
Nov 20 at 0:43
add a comment |
up vote
0
down vote
Vue's DOM objects are kept in a Shadow DOM in browsers that support it. This provides isolation from the rest of the DOM but will appear hidden in some cases. This is why your attempts to alter the DOM aren't having any effect.
The very point of Vue is to remove the need to directly alter the DOM. The first parts of the Vue Guide show just how easy it is to update the view simply by altering data.
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
You're missing style. document.getElementById(i + j).style.display = 'none';
As an aside, you can and should really do this through Vue using the data object. Vue is data oriented and its reactivity works using data, computed, etc. Directly manipulating the DOM as you are doing will bypass any reactivity.
it still doesnt work, as I said, I also tried .hide() with jquery, and they all worked if you just look at the changed html code.
– Sayakura
Nov 20 at 0:43
add a comment |
up vote
0
down vote
You're missing style. document.getElementById(i + j).style.display = 'none';
As an aside, you can and should really do this through Vue using the data object. Vue is data oriented and its reactivity works using data, computed, etc. Directly manipulating the DOM as you are doing will bypass any reactivity.
it still doesnt work, as I said, I also tried .hide() with jquery, and they all worked if you just look at the changed html code.
– Sayakura
Nov 20 at 0:43
add a comment |
up vote
0
down vote
up vote
0
down vote
You're missing style. document.getElementById(i + j).style.display = 'none';
As an aside, you can and should really do this through Vue using the data object. Vue is data oriented and its reactivity works using data, computed, etc. Directly manipulating the DOM as you are doing will bypass any reactivity.
You're missing style. document.getElementById(i + j).style.display = 'none';
As an aside, you can and should really do this through Vue using the data object. Vue is data oriented and its reactivity works using data, computed, etc. Directly manipulating the DOM as you are doing will bypass any reactivity.
edited Nov 20 at 0:44
answered Nov 20 at 0:40
james.brndwgn
346110
346110
it still doesnt work, as I said, I also tried .hide() with jquery, and they all worked if you just look at the changed html code.
– Sayakura
Nov 20 at 0:43
add a comment |
it still doesnt work, as I said, I also tried .hide() with jquery, and they all worked if you just look at the changed html code.
– Sayakura
Nov 20 at 0:43
it still doesnt work, as I said, I also tried .hide() with jquery, and they all worked if you just look at the changed html code.
– Sayakura
Nov 20 at 0:43
it still doesnt work, as I said, I also tried .hide() with jquery, and they all worked if you just look at the changed html code.
– Sayakura
Nov 20 at 0:43
add a comment |
up vote
0
down vote
Vue's DOM objects are kept in a Shadow DOM in browsers that support it. This provides isolation from the rest of the DOM but will appear hidden in some cases. This is why your attempts to alter the DOM aren't having any effect.
The very point of Vue is to remove the need to directly alter the DOM. The first parts of the Vue Guide show just how easy it is to update the view simply by altering data.
add a comment |
up vote
0
down vote
Vue's DOM objects are kept in a Shadow DOM in browsers that support it. This provides isolation from the rest of the DOM but will appear hidden in some cases. This is why your attempts to alter the DOM aren't having any effect.
The very point of Vue is to remove the need to directly alter the DOM. The first parts of the Vue Guide show just how easy it is to update the view simply by altering data.
add a comment |
up vote
0
down vote
up vote
0
down vote
Vue's DOM objects are kept in a Shadow DOM in browsers that support it. This provides isolation from the rest of the DOM but will appear hidden in some cases. This is why your attempts to alter the DOM aren't having any effect.
The very point of Vue is to remove the need to directly alter the DOM. The first parts of the Vue Guide show just how easy it is to update the view simply by altering data.
Vue's DOM objects are kept in a Shadow DOM in browsers that support it. This provides isolation from the rest of the DOM but will appear hidden in some cases. This is why your attempts to alter the DOM aren't having any effect.
The very point of Vue is to remove the need to directly alter the DOM. The first parts of the Vue Guide show just how easy it is to update the view simply by altering data.
answered Nov 20 at 15:50
Ant
3113
3113
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53384596%2fview-not-updating-even-the-html-changed%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
you could achieve the traditional javascript functionalities using only Vue
– Boussadjra Brahim
Nov 20 at 0:40
2
Yes, don't directly manipulate the DOM like that. You're supposed to change the state of the Vue component, and write your template accordingly.
– Chris G
Nov 20 at 0:43
I tried almost the same thing in another function which is triggered by a @click , it works perfectly, so confused.
– Sayakura
Nov 20 at 0:48
Again, don't do this. You're using Vue, and supposed to adhere to its patterns. Use two nested
v-forloops in your template and render the elements conditionally.– Chris G
Nov 20 at 0:53