Vue 组件通信 - Ref组件通信

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue组件通信 - Ref组件通信

目录

Ref组件通信

创建表单

绑定组件

定义组件中的状态

修改组件中的状态

说明

组件注意

解决方式

v-once的作用

总结


Ref组件通信

Ref绑定dom节点,拿到的就是dom对象

Ref绑定组件,拿到的就是组件对象

Ref是固定的,作用是引用。

创建表单

创建一个表单,获取组件实例,不通过父子通信,直接拿状态和赋值状态。

Ref是固定的,作用是引用。

示例如下:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../lib/vue.js"></script>
</head>
<body>
<div id="box">
    <input type="text" ref="mytext">
    <input type="password" ref="mypassword">
    <div ref="mydiv">1111111</div>
    <button @click="handleAdd">Add</button>
    <child></child>
</div>
<script>
    let vm = new Vue({
        el: "#box",
        methods: {
            handleAdd() {
                console.log(this.$refs.mytext, this.$refs.mypassword, this.$refs.mydiv)
            }
        }
    })
</script>
</body>
</html>

绑定组件

因为还没有定义组件,所以控制台会抛出异常。

下面开始设置全局组件,并在绑定事件中打印组件对象。

示例如下:

html 复制代码
<div id="box">
    <input type="text" ref="mytext">
    <input type="password" ref="mypassword">
    <div ref="mydiv">1111111</div>
    <button @click="handleAdd">Add</button>
    <child ref="mychild"></child>
</div>
<script>
    Vue.component("child", {
        template:`
        <div>
        child
        </div>`
    })
    let vm = new Vue({
        el: "#box",
        methods: {
            handleAdd() {
                console.log(this.$refs.mytext, this.$refs.mypassword, this.$refs.mychild)
            }
        }
    })
</script>

效果:

定义组件中的状态

在组件内部定义状态,并渲染出来。

示例如下:

javascript 复制代码
Vue.component("child", {
    data() {
      return {
          myname: "child-222222"
      }
    },
    template:`
    <div>
    child--{{myname}}
    </div>`
})

修改组件中的状态

首先拿到组件中定义的状态,然后修改组件中的状态。

示例如下:

javascript 复制代码
let vm = new Vue({
    el: "#box",
    methods: {
        handleAdd() {
            //console.log(this.$refs.mytext, this.$refs.mypassword, this.$refs.mychild)
            console.log(this.$refs.mychild.myname)
            this.$refs.mychild.myname="parent-111111"
        }
    }
})

效果:

说明

这样的修改方式虽然简单,但是容易造成混乱和出现问题且不易排查和扩展;

容易造成数据流紊乱。

组件注意

属性:父组件传给你的属性,只有父组件可以重新传,但不允许子组件随意修改。

示例如下:

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../lib/vue.js"></script>
</head>
<body>
<div id="box">
    {{title}}
    <child :mytitle="title"></child>
</div>
<script>
    Vue.component("child", {
        props:["mytitle"],
        template:`
        <div>
        child-{{mytitle}}
        <button @click="handleClickc">click</button>
        </div>`,

        methods: {
            handleClickc() {
                this.mytitle="2222222222"
            }
        }
    })
    let vm = new Vue({
        el:"#box",
        data:{
            title:"1111111111111"
        }
    })
</script>
</body>
</html>

效果:

页面警告 不要直接去修改组件传递过来的属性;因为修改了,下次再传属性还是会被覆盖。

会造成子属性和父属性不统一,数据流紊乱,会出现不可预期的错误。

属性 --父组件传给你的属性,只有父组件可以重新传,但不允许子组件随意修改.

状态 -- 组件内部的状态,可以随意修改

解决方式

v-once 只修改一次,然后缓存状态。

示例如下:

javascript 复制代码
Vue.component("child", {
    props:["mytitle"],
    template:`
    <div v-once>
    child-{{mytitle}}
    <button @click="handleClickc">click</button>
    </div>`,

    methods: {
        handleClickc() {
            this.mytitle="2222222222"
        }
    }
})

v-once的作用

渲染普通的HTML元素在Vue中时非常快速的,但有的时候你可能有一个组件,这个组件包含了大量静态内容。在这种情况下,你可以在根元素上添加v-once attribute 以确保这些内容只计算一次然后缓存下来,就像这样:

总结

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue组件通信 - Ref组件通信

相关推荐
学渣y22 分钟前
React状态管理-对state进行保留和重置
javascript·react.js·ecmascript
_龙衣41 分钟前
将 swagger 接口导入 apifox 查看及调试
前端·javascript·css·vue.js·css3
struggle20252 小时前
continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手
javascript·ide·python·typescript·开源
x-cmd2 小时前
[250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
前端·javascript·windows·npm·node.js
夏之小星星3 小时前
el-tree结合checkbox实现数据回显
前端·javascript·vue.js
琉璃℡初雪4 小时前
vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件
vue.js·pdf·excel
为美好的生活献上中指4 小时前
java每日精进 5.11【WebSocket】
java·javascript·css·网络·sql·websocket·网络协议
拖孩6 小时前
【Nova UI】十五、打造组件库之滚动条组件(上):滚动条组件的起步与进阶
前端·javascript·css·vue.js·ui组件库
苹果电脑的鑫鑫6 小时前
element中表格文字剧中可以使用的属性
javascript·vue.js·elementui
Hejjon6 小时前
Vue2 elementUI 二次封装命令式表单弹框组件
前端·vue.js