Vue父组件调用子组件方法this.$refs用法

这篇具有很好参考价值的文章主要介绍了Vue父组件调用子组件方法this.$refs用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 介绍

this.$refs(ref)的用法
ref用在组件可以调用组件的属性方法
ref用在标签可以对标签进行操作

2.父组件调用子组件的方法

2.1.父组件

代码删除了一部分,可能复制会报错

<template>
<div>
  <el-table
    :data="users"
    style="width: 100%">
    <el-table-column label="操作">
      <template slot-scope="users">
        <el-button
          size="mini"
          @click="handleEdit(users.$index, users.row)">编辑</el-button>
        <el-button
          size="mini"
          type="danger"
          @click="handleDelete(users.$index, users.row)">删除</el-button>
      </template>
    </el-table-column>
  </el-table>
  <div>
    <editUserVue ref="edituser" />//2.引入组件,给组件一个ref的名字方便调用方法
  </div>
</div>
</template>
<script>
import editUserVue from './editUser.vue'//1.引入组件
export default {
  components: {
    editUserVue//1.引入组件
  },
  name: 'Demo',
  data() {
    return {
      users: [{}]
    }
  },
  methods: {
    handleEdit(index, row) {
      this.$refs['edituser'].init(row)//用$refs赋值调用子组件的init方法
    },
    handleDelete(index, row) {
      console.log(index, row)
    }
  }
}
</script>
2.2.子组件
<template>
    <el-dialog :visible.sync="getedituser">
      <el-form :model="user" status-icon :rules="rules" ref="user" label-width="100px" class="demo-ruleForm">
            <el-form-item label="名字" prop="name">
                <el-input v-model="user.name"></el-input>
            </el-form-item>
            <el-form-item label="年龄" prop="age">
                <el-input v-model.number="user.age"></el-input>
            </el-form-item>
            <el-form-item label="身高" prop="high">
                <el-input v-model.number="user.high"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="submitForm('user')">提交</el-button>
                <el-button @click="resetForm('user')">重置</el-button>
            </el-form-item>
        </el-form>
    </el-dialog>
</template>

<script>
  export default {
    name: 'editUser',
    data() {
      var checkHigh = (rule, value, callback) => {
        if (!value) {
          return callback(new Error('身高不能为空'));
        }
        setTimeout(() => {
          if (!Number.isInteger(value)) {
            callback(new Error('请输入数字值'));
          } else {
            if (10 > value||value > 300) {
              callback(new Error('请输入正确身高'));
            } else {
              callback();
            }
          }
        }, 1000);
      };
      var checkName = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入姓名'));
        } else {
          callback();
        }
      };
      var checkAge = (rule, value, callback) => {
        if (!Number.isInteger(value)) {
          callback(new Error('年龄只能为数字!'));
        } else {
          callback();
        }
      };
      return {
        user: {
        },
        rules: {
          name: [
            { validator: checkName, trigger: 'blur' }
          ],
          age: [
            { validator: checkAge, trigger: 'blur' }
          ],
          high: [
            { validator: checkHigh, trigger: 'blur' }
          ]
        },
        getedituser: true
      };
    },
    methods: {
      submitForm(formName) {
            console.log(this.user)
            this.$refs[formName].validate((valid) => {
            if (valid) {
                this.$axios({
                    method: 'post',
                    url: '/api/mydemo/edituser',
                    data: this.user,
                    // contentType: 'application/json'
                }).then((res)=>{
                    if(res.status === 200){
                        alert('submit!')
                        this.getedituser = false
                    }else{
                        alert('error!')
                    }
                })
            } else {
                console.log('error submit!!');
                return false;
            }
            });
        },
        resetForm(formName) {
          console.log(formName)
            this.$refs[formName].resetFields();
        },
        init(data){//父组件调用的方法
          console.log('来了')
          this.getedituser=true;
          //data是父组件弹窗传递过来的值,我们可以打印看看
          console.log(data)
          this.user = data
        },
    }
  }
</script>

3.效果

Vue父组件调用子组件方法this.$refs用法
点击弹窗修改框文章来源地址https://www.toymoban.com/news/detail-467023.html

到了这里,关于Vue父组件调用子组件方法this.$refs用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app使用vue3,在元素或组件实例上添加ref,用this.$refs显示undefined

    项目中引用了一个UI组件库,在表单上添加了`ref`属性,方便提交时验证。触发提交方法时显示不存在这个方法或this.$refs为undefined。 解决方法: 引入`getCurrentInstance`,t得到当前组件实例,然后用`ctx.$refs`代替`this.$refs`。这里的`ctx`相当于全局this。 ------------------ 2023/10/27更新-

    2024年02月07日
    浏览(49)
  • uniapp 组件引用 TypeError: this.$refs.xxx is not a function 解决方法(全)

    因为自己的项目中,某些常用模块自己定义了组件,使用时 常出现 TypeError: this.$refs.xxx is not a function (即没有xxx这个方法),结合网友和自身遇到的问题,得出三种方法 第一种:引用注册  即 在页面中 import 组件。  解决方法:查看是否组件引用正确。 第二种:组件在循环

    2024年02月11日
    浏览(45)
  • vue - 动态绑定ref(使用变量)以及获取方式,解决v-for循环嵌套自定义子组件时无法this.$refs.xx找到动态组件的情况(详细示例教程)适合 vue.js nuxt.js uniapp

    正常情况,我们需要在vue中获得某个dom或者组件,我们会通过绑定 ref 然后通过绑定后的名字来获取这个dom 。 但是,如果我们在v-for中绑定ref的话,那么这个ref就会存在多个,比如我们点击事件让对应的显示/隐藏的话,我们很难找到这个对应的元素。 那么,这时我们需要动

    2024年02月13日
    浏览(51)
  • Vue06/Vue中this.$nextTick( ) 的用法及详细介绍

    语法: this.$nextTick( 箭头函数体 )   作用: this.$nextTick这个方法作用是当数据被修改后使用这个方法 回调函数获取更新后的dom再渲染出来 注意: 1.data改变,更新DOM是异步的 2.获取更新后的DOM方法 this.$nextTick(() = { 需要更新的DOM } ) 说明:  1.$nextTick是一个异步微任务,等待当前函数

    2024年02月16日
    浏览(37)
  • vue04---计算属性/监听(侦听)属性/Vue生命周期/组件介绍和使用/组件间通信/ref属性

    # 1 计算属性是基于它们的依赖变量进行缓存的 # 2 计算属性只有在它的相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算) # 3 计算属性就像Python中的property,可以把方法/函数伪装成属性 # 4 计算属性,必须有返回值 基本使用 重写过滤案

    2024年02月08日
    浏览(62)
  • Vue子组件向父组件传值(this.$emit()方法)

    首先必须在父组件中引用子组件,然后实现传值 第一步 在父组件中引入子组件 使用import引入组件 声明 使用 第二步 子组件向父组件传值 1.  在子组件中需要向父组件传值处使用this.$emit(\\\"function\\\",param);    //其中function为父组件定义函数,param为需要传递参数 2.  在父组件中子

    2024年02月10日
    浏览(31)
  • 父组件调用子组件 ref 不生效?组件暴露 ref ?

    要暴露 ref 最关键的就是 forwardRef forwardRef 是 React 中的一个高阶函数,用于在函数组件中将 ref 属性向下传递给子组件。 在 React 中,我们可以使用 ref 属性来获取对一个组件实例的引用,以便在父组件中操作子组件。但是,当我们在一个函数组件中使用 ref 属性时,默认情况下

    2024年02月09日
    浏览(28)
  • Vue 子组件使用 this.$parent 无法访问到父组件数据和方法

    前言 最近在使用父子组件时候,通过this.$parent访问父组件数据和方法,出现undefined的情况。 实际场景是父组件有一个dialog弹出框,包含几个子组件form表单,根据标识只展示一个子组件。 在子组件需要传递一个ID给父组件中的data数据,想到this.$parent(比较简便),不想用this.$

    2024年02月11日
    浏览(46)
  • 【vue】this.$nextTick解决this.$refs undefined的问题

    说明 1、发邮件页面分成两个部分:模态框页面(头部和底部)和form页面(操作按钮) 2、点击回复按钮,要将发件人信息带到模态框页面,给定默认值且禁止收件人下拉选择(多个邮箱) 3、每次操作都可以将值传到form页面,但是模态框页面获取不到值。因为邮件列表点击

    2024年02月10日
    浏览(39)
  • 解决:this.$refs引用子组件报错 is not a function

    问题描述: vue通过this.$refs引用子组件出现undefined或者is not a function的错误 报错如下: _this3.$refs.fileUpload.changeFileList is not a function 问题分析: 问题1:出现undefined错误 包含子组件的标签需要放在中第一个子标签的子标签中,而且需要设置ref属性, 因为父组件逻辑代码中是通过

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包