VUE.js 提交表单后刷新img src
VUE.js Refreshing img scr after submitting a form
我在使用 vue.js2 时遇到了以下问题。
提交表单后,我想刷新图片src。
提交表单后,后台会生成一张新的图表图片。
这张新图表图像取代了旧图表图像,但是 URL 保持不变。
要更新图像,我在图像 src 上使用 v-bind 并将其绑定到数据变量之一。
提交表单前显示的起始图像是 placeholder.jpg.
收到响应后,我调用 changeChart 方法将其更新为 graph.jpg.
此操作有效并且图像已更新
我在这里面临的问题是当我更新其中一个值并再次单击提交时,图像没有改变。
但是,当我首先单击清除方法并在下次提交时再次将 chart_url 设置为 placeholder.jpg 时,图像会正确更改。
<v-img
v-bind:src=this.chart_url
</v-img>
<script>
export default {
name: "CenterComponent",
data: function () {
return {
value1: "",
value2: "",
value3: "",
output: null,
chart_url: "http://127.0.0.1:5000/media/pictures/placeholder.jpg",
}
},
methods:{
clear(){
this.value1 = "";
this.value2 = "";
this.value3 = "";
this.output = "";
this.chart_url = "http://127.0.0.1:5000/media/pictures/placeholder.jpg";
},
changeChart(){
this.chart_url = "http://127.0.0.1:5000/media/pictures/graph.jpg"
},
submitForm(){
fetch("http://127.0.0.1:5000/predict",{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
value1: this.value1,
value2: this.value2,
value3: this.value3
})
}
).then(response => {
if (response.ok) {
return response.json();
}
}).then(data => {
this.output = data["prediction"];
this.changeChart();
});
}
},
};
</script>
正如您所说,第一次提交表单时,您实际上将 url 从 'placeholder.jpg' 更改为 'graph.jpg',并且在随后的提交中它仍然是 'graph.jpg'.
这意味着浏览器不会在缓存时每次更改为 'graph.jpg' 时再次获取该图像。要让浏览器获取新图像,您可以尝试 cache-busting,方法是在 changeChart 方法中的 url 末尾附加一个随机数。您实际上是在告诉浏览器它没有这张图片,所以去获取它吧。
changeChart(){
const randomNumber = Math.floor(Math.random() * 1000)
this.chart_url = `http://127.0.0.1:5000/media/pictures/graph.jpg?cachebust=${randomNumber}`
},
这将附加一个 1-1000 之间的随机数,但您显然可以根据您的用例改进它。
或者,在处理图像时在服务器上创建一个唯一的图像名称,并在 POST 调用的响应中 return 这个新名称。这样你就不会遇到这个问题了。
我在使用 vue.js2 时遇到了以下问题。
提交表单后,我想刷新图片src。
提交表单后,后台会生成一张新的图表图片。
这张新图表图像取代了旧图表图像,但是 URL 保持不变。
要更新图像,我在图像 src 上使用 v-bind 并将其绑定到数据变量之一。
提交表单前显示的起始图像是 placeholder.jpg.
收到响应后,我调用 changeChart 方法将其更新为 graph.jpg.
此操作有效并且图像已更新
我在这里面临的问题是当我更新其中一个值并再次单击提交时,图像没有改变。
但是,当我首先单击清除方法并在下次提交时再次将 chart_url 设置为 placeholder.jpg 时,图像会正确更改。
<v-img
v-bind:src=this.chart_url
</v-img>
<script>
export default {
name: "CenterComponent",
data: function () {
return {
value1: "",
value2: "",
value3: "",
output: null,
chart_url: "http://127.0.0.1:5000/media/pictures/placeholder.jpg",
}
},
methods:{
clear(){
this.value1 = "";
this.value2 = "";
this.value3 = "";
this.output = "";
this.chart_url = "http://127.0.0.1:5000/media/pictures/placeholder.jpg";
},
changeChart(){
this.chart_url = "http://127.0.0.1:5000/media/pictures/graph.jpg"
},
submitForm(){
fetch("http://127.0.0.1:5000/predict",{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
value1: this.value1,
value2: this.value2,
value3: this.value3
})
}
).then(response => {
if (response.ok) {
return response.json();
}
}).then(data => {
this.output = data["prediction"];
this.changeChart();
});
}
},
};
</script>
正如您所说,第一次提交表单时,您实际上将 url 从 'placeholder.jpg' 更改为 'graph.jpg',并且在随后的提交中它仍然是 'graph.jpg'.
这意味着浏览器不会在缓存时每次更改为 'graph.jpg' 时再次获取该图像。要让浏览器获取新图像,您可以尝试 cache-busting,方法是在 changeChart 方法中的 url 末尾附加一个随机数。您实际上是在告诉浏览器它没有这张图片,所以去获取它吧。
changeChart(){
const randomNumber = Math.floor(Math.random() * 1000)
this.chart_url = `http://127.0.0.1:5000/media/pictures/graph.jpg?cachebust=${randomNumber}`
},
这将附加一个 1-1000 之间的随机数,但您显然可以根据您的用例改进它。
或者,在处理图像时在服务器上创建一个唯一的图像名称,并在 POST 调用的响应中 return 这个新名称。这样你就不会遇到这个问题了。