Javascript 动态变化的道具
在我的应用程序中,我有多个“上传”按钮,我想在用户单击该按钮时显示该特定按钮的微调器/加载器。上传完成后,我想删除该微调器/加载器 我将按钮嵌套在一个组件中,因此在按钮的文件中,我从父级接收一个道具,然后将其存储在本地,这样加载程序就不会显示所有上载按钮。但当父对象中的值发生变化时,子对象无法获得正确的道具值 App.vue:Javascript 动态变化的道具,javascript,vue.js,Javascript,Vue.js,在我的应用程序中,我有多个“上传”按钮,我想在用户单击该按钮时显示该特定按钮的微调器/加载器。上传完成后,我想删除该微调器/加载器 我将按钮嵌套在一个组件中,因此在按钮的文件中,我从父级接收一个道具,然后将其存储在本地,这样加载程序就不会显示所有上载按钮。但当父对象中的值发生变化时,子对象无法获得正确的道具值 App.vue: <template> <upload-button :uploadComplete="uploadCompleteBoolean"
<template>
<upload-button
:uploadComplete="uploadCompleteBoolean"
@startUpload="upload">
</upload-button>
</template>
<script>
data(){
return {
uploadCompleteBoolean: true
}
},
methods: {
upload(){
this.uploadCompleteBoolean = false
// do stuff to upload, then when finished,
this.uploadCompleteBoolean = true
}
</script>
<template>
<button
@click="onClick">
<button>
</template>
<script>
props: {
uploadComplete: {
type: Boolean
}
data(){
return {
uploadingComplete: this.uploadComplete
}
},
methods: {
onClick(){
this.uploadingComplete = false
this.$emit('startUpload')
}
</script>
数据(){
返回{
uploadCompleteBoolean:true
}
},
方法:{
上传(){
this.uploadCompleteBoolean=false
//做一些要上传的东西,完成后,
this.uploadCompleteBoolean=true
}
按钮。vue:
<template>
<upload-button
:uploadComplete="uploadCompleteBoolean"
@startUpload="upload">
</upload-button>
</template>
<script>
data(){
return {
uploadCompleteBoolean: true
}
},
methods: {
upload(){
this.uploadCompleteBoolean = false
// do stuff to upload, then when finished,
this.uploadCompleteBoolean = true
}
</script>
<template>
<button
@click="onClick">
<button>
</template>
<script>
props: {
uploadComplete: {
type: Boolean
}
data(){
return {
uploadingComplete: this.uploadComplete
}
},
methods: {
onClick(){
this.uploadingComplete = false
this.$emit('startUpload')
}
</script>
道具:{
上载完成:{
类型:布尔型
}
数据(){
返回{
uploadingComplete:this.uploadComplete
}
},
方法:{
onClick(){
this.uploadingComplete=false
此.$emit('startupboad'))
}
修复了事件名称和道具名称,然后它就可以工作了
this.$emit('start-upload')
,然后在模板中使用
:uploadComplete=“uploadCompleteBoolean”
更改为:upload complete=“uploadCompleteBoolean”
编辑:刚刚注意到您提到的数据属性=上传完成
它很容易修复,为props=uploadComplete
添加一块手表
下面是一个简单的演示:
Vue.config.productionTip=false
Vue.component('上传按钮'{
模板:`Upload for Data:{{uploadingComplete}}}属性:{{{uploadComplete}}
`,
道具:{
上载完成:{
类型:布尔型
}
},
数据(){
返回{
uploadingComplete:this.uploadComplete
}
},
监视:{//watch prop=uploadComplete,如果更改,则同步到数据属性=uploadingComplete
上传完成:函数(newVal){
this.uploadingComplete=newVal
}
},
方法:{
onClick(){
this.uploadingComplete=false
此.$emit('start-upload'))
}
}
})
新Vue({
el:“#应用程序”,
数据(){
返回{
uploadCompleteBoolean:true
}
},
方法:{
上传(){
this.uploadCompleteBoolean=false
//做一些要上传的东西,完成后,
this.uploadCompleteBoolean=true
},
更改状态(){
this.uploadCompleteBoolean=!this.uploadCompleteBoolean
}
}
})
切换状态{uploadCompleteBoolean}
状态:{uploadCompleteBoolean}
修复了事件名称和道具名称,然后它就可以工作了
this.$emit('start-upload')
,然后在模板中使用
:uploadComplete=“uploadCompleteBoolean”
更改为:upload complete=“uploadCompleteBoolean”
编辑:刚刚注意到您提到的数据属性=上传完成
它很容易修复,为props=uploadComplete
添加一块手表
下面是一个简单的演示:
Vue.config.productionTip=false
Vue.component('上传按钮'{
模板:`Upload for Data:{{uploadingComplete}}}属性:{{{uploadComplete}}
`,
道具:{
上载完成:{
类型:布尔型
}
},
数据(){
返回{
uploadingComplete:this.uploadComplete
}
},
监视:{//watch prop=uploadComplete,如果更改,则同步到数据属性=uploadingComplete
上传完成:函数(newVal){
this.uploadingComplete=newVal
}
},
方法:{
onClick(){
this.uploadingComplete=false
此.$emit('start-upload'))
}
}
})
新Vue({
el:“#应用程序”,
数据(){
返回{
uploadCompleteBoolean:true
}
},
方法:{
上传(){
this.uploadCompleteBoolean=false
//做一些要上传的东西,完成后,
this.uploadCompleteBoolean=true
},
更改状态(){
this.uploadCompleteBoolean=!this.uploadCompleteBoolean
}
}
})
切换状态{uploadCompleteBoolean}
状态:{uploadCompleteBoolean}
UploadButton组件不应将uploadingComplete
作为本地状态(数据);这只会使组件复杂化,因为您试图将uploadComplete
属性和uploadingComplete
数据混合使用
微调器的可见性应由父组件通过道具驱动,按钮本身不应负责通过响应按钮单击的本地状态控制微调器的可见性
就这样做吧:
watch:{
uploadComplete:{
handler(val){
//val gives you the updated value
}, deep:true
},
}
Vue.component('upload-button'{
模板:“#上传按钮”,
道具:[“上传”],
});
新Vue({
el:“#应用程序”,
数据:{
上传1:false,
上传2:false,
},
方法:{
上传1(){
this.uploading1=true;
setTimeout(()=>this.uploading1=false,Math.random()*1000);
},
上传2(){
this.uploading2=true;
setTimeout(()=>this.uploading2=false,Math.random()*1000);
},
},
});
上传1
上传2
上传。。。