Apenas uma pergunta rápida.
Você pode forçar Vue.js
a recarregar / recalcular tudo? Se sim, como?
javascript
vue.js
Dave
fonte
fonte
Respostas:
Tente este feitiço mágico:
Não há necessidade de criar vars suspensos :)
Atualização: Encontrei esta solução quando comecei a trabalhar apenas com o VueJS. Contudo, novas explorações provaram essa abordagem como uma muleta. Tanto quanto me lembro, em pouco tempo me livrei dele, simplesmente colocando todas as propriedades que não eram atualizadas automaticamente (principalmente as aninhadas) nas propriedades calculadas.
Mais informações aqui: https://vuejs.org/v2/guide/computed.html
fonte
$forceUpdate()
NUNCA funcionou para mim na versão 2.5.17.Parece uma solução bastante limpa da matthiasg sobre esse problema :
Para o meu caso de uso, eu estava inserindo um getter Vuex em um componente como suporte. De alguma forma, o Vuex buscava os dados, mas a reatividade não era confiável para renderizar novamente o componente. No meu caso, definir o componente
key
para algum atributo no suporte garantiu uma atualização quando os getters (e o atributo) finalmente foram resolvidos.fonte
mounted
será executado, etc)Por quê?
... você precisa forçar uma atualização?
Talvez você não esteja explorando o Vue da melhor maneira possível:
Veja os comentários na demonstração abaixo. Ou abra a mesma demonstração em um JSFiddle aqui .
Para dominar esta parte do Vue, verifique os Documentos oficiais sobre reatividade - advertências de detecção de alterações . É uma leitura obrigatória!
fonte
Vue.set()
também funciona dentro de componentes.Por favor, leia este http://michaelnthiessen.com/force-re-render/
A maneira horrível: recarregar a página inteira
A maneira terrível: usar o v-if hack
A melhor maneira: usar o método forceUpdate interno do Vue
A melhor maneira: alterar as chaves no seu componente
Eu também uso o watch: em algumas situações.
fonte
Tente usar
this.$router.go(0);
para recarregar manualmente a página atual.fonte
Use
vm.$set('varName', value)
. Procure detalhes em Change_Detection_Caveats .fonte
Claro ... você pode simplesmente usar o atributo-chave para forçar a re-renderização (recreação) a qualquer momento.
<mycomponent :key="somevalueunderyourcontrol"></mycomponent>
Veja https://jsfiddle.net/mgoetzke/epqy1xgf/ para um exemplo
Também foi discutido aqui: https://github.com/vuejs/Discussion/issues/356#issuecomment-336060875
fonte
juntamente com ele use
this.$set(obj,'obj_key',value)
e atualizeuniqueKey
para cada atualização no valor do objeto (obj) para cada atualizaçãothis.uniqueKey++
funcionou para mim dessa maneira
fonte
Portanto, há duas maneiras de fazer isso,
1) Você pode usar
$forceUpdate()
dentro de seu manipulador de métodos, ou seja,<your-component @click="reRender()"></your-component>
2) Você pode atribuir um
:key
atributo ao seu componente e aumentar quando desejar renderizar novamente<your-component :key="index" @click="reRender()"></your-component>
fonte
usando a diretiva v-if
Portanto, simplesmente alterando o valor de truevalue de false para true fará com que o componente entre a div seja renderizado novamente
fonte
Para recarregar / renderizar novamente / atualizar o componente, pare as codificações longas. Existe uma maneira do Vue.JS de fazer isso.
Basta usar o
:key
atributoPor exemplo:
Estou usando esse no BS Vue Table Slot. Dizendo que farei algo para esse componente, torne-o único.
fonte
Isso tem funcionado para mim.
O outro componente dispara o evento refresh-stores-list fará com que o componente atual seja renderizado novamente
fonte
Eu encontrei um caminho. É um pouco hacky, mas funciona.
Onde
vm
está o seu objeto de modelo de exibição ex
é uma variável inexistente.O Vue.js irá reclamar disso no log do console, mas disparará uma atualização para todos os dados. Testado com a versão 1.0.26.
fonte
Trabalhou para mim
fonte
basta adicionar este código:
Boa sorte
fonte
: key = "$ route.params.param1" basta usar a tecla com seus parâmetros para recarregar automaticamente os filhos.
fonte
Eu tive esse problema com uma galeria de imagens que queria renderizar novamente devido a alterações feitas em uma guia diferente. Então tab1 = imageGallery, tab2 = favoriteImages
tab @ change = "updateGallery ()" -> isso força minha diretiva v-for a processar a funçãofilImagesImages toda vez que alterno as guias.
fonte
desculpe pessoal, exceto pelo método de recarregamento da página (tremulação), nenhum deles funciona para mim (: key não funcionou).
e eu encontrei esse método no antigo fórum vue.js, que funciona para mim:
https://github.com/vuejs/Discussion/issues/356
fonte