Vue中 v-bind、v-model、以及父给子传值

一、v-bind

v-bind用于绑定一个或多个属性值,在本页面中显示数据

或者向子组件传递props值

1、用法:

v-bind='attribute'(等同于: attribute="attribute"   静态传值)   attribute是常量,可以定义在data中,也可以定义在computed中,在computed 中定义要给返回值

示例:

dom元素中:el-upload(ref='upload' v-bind='uploadConfig')

computed中:

 uploadConfig() {

      return {

        action: this.action ? this.$ajax.baseURL + this.action: api.upload_Imgs,

        'file-list':this.pictureData,

        limit: this.limit,

              }

    },

vue官网上针对将一个对象的所有属性都传值的写法

当我们使用别人的组件,例如element时,传的属性值很多,可以用下面的方式进行包装,不写参数名,用v-bind

2、用法:

v-bind:attribute = "attribute"(等同于: :attribute="attribute"   动态传值)  attribute是变量

二、v-model在element组件中,用在表单组件中,可以实现数据双向绑定,而v-bind是单向的

三、父子传值

(一)父给子

1、属性传值,用props接收

2、使用refs调用方法和属性

调用子组件函数:

示例:

this.$refs['formModel'].validate((valid)

this.$refs['special-dialog'].open()

调用子组件属性:

示例:

let tableData = this.$refs.crud.getTableData()

(二)子给父

1、通过函数传值

在子组件里:

this.$emit('change', props)  ——[事件名称,所传参数]

在父组件dom元素中:

<child @change="changeFun(props)"></child>     ——props参数可以直接带过来

methods: {

        changeFun(){

                //  父组件对子组件传值进行逻辑处理

        }

}

!!!在dom元素中,如果也有要传递的参数,那么在dom元素里可以使用匿名函数,同时将子组件参数props和dom元素参数传递给方法里

<child @change= "props=>changeFun(props, index1, index2)"></child>    ——index1和index2都为dom元素上的参数

props是子组件参数,写成匿名函数的形式,后面是dom上的变量

示例:

1、子组件中:

 

2、父组件绑定emit里回执的函数名

 【注意】写成@edits='edits',而不是@edits='edits(row)'

父组件写方法:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的问题是关于Vue3和TypeScript结合使用Element Plus组件库进行图片上传并使用v-model进行传递的问题。那么我来为你解答一下: 首先,在Vue3,我们可以使用`<script setup>`语法来编写组件逻辑,这样可以更加简洁和易于理解。同时,使用TypeScript可以让我们在开发过程更加规范和高效。 其次,对于Element Plus组件库的使用,我们可以通过`import`语句引入需要使用的组件。在图片上传组件,我们可以使用`<el-upload>`组件来进行上传操作。同时,我们可以通过`v-model`来进行的双向绑定,从而实现父组件之间的数据传递。 下面是一个示例代码,供你参考: ```html <template> <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-success="handleSuccess" :before-upload="beforeUpload" v-bind="$attrs" v-model="fileList" :auto-upload="false" > <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip"> 只能上传jpg/png文件,且不超过500kb </div> </el-upload> </template> <script setup lang="ts"> import { defineProps } from 'vue'; import { ElUpload } from 'element-plus'; interface UploadProps { value: any; onChange: (val: any) => void; } const props = defineProps<UploadProps>({ value: {}, onChange: () => {}, }); const fileList = props.value; const handleSuccess = (res: any, file: any) => { console.log(res, file); }; const beforeUpload = (file: any) => { const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; const isLt500Kb = file.size / 1024 < 500; if (!isJpgOrPng) { this.$message.error('只能上传jpg/png文件'); return false; } if (!isLt500Kb) { this.$message.error('文件大小不能超过500kb'); return false; } return true; }; watch( () => fileList, (newVal) => { props.onChange(newVal); } ); </script> ``` 在父组件,我们可以使用`v-model`来进行的双向绑定,如下所示: ```html <template> <div> <Upload v-model="imageUrl" /> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; import Upload from './Upload.vue'; const imageUrl = ref(''); </script> ``` 这样,当组件发生变化时,父组件的`imageUrl`变量也会相应地更新。 希望这个回答能够帮助到你,如有疑问,欢迎继续追问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值