Vue-3

父子通信+双向绑定

思路:用v-model 的原理:@input和:value。需要在子组件里设置data,新设置两个变量,不能直接在props里的变量改,不然会报错。再然后用@input方法下面在发射一个方法,让父组件监听,监听下面再把父组件的值修改。

父组件访问子组件

1.$children
事件需要在父组件加!
子组件下面的data和methods得和template在同一级
而且都要加上this

<div id="box">
    <zxx></zxx>
    <button @click='hhhh'>点击</button>
</div>
methods:{
    hhhh(){
        console.log(this.$children[0].zxx);
    }
}

缺点:如果重新插入别的子组件的话,索引号就可能会改变,因此不常用

2.$refs
常用
需要给组件增加一个属性

<zxx ref='aaa'></zxx>

而且要这样调用

methods:{
    hhhh(){
        console.log(this.$refs.aaa);
    }
}

3.自访问父(理解),基本不用,不然耦合性太差了,而且vue实例一般不加别的属性
注意,这个事件只能放在子模板中

$parent,$root

Slot

就是为了更加灵活地运用组件
1.在模板里面写上slot标签,name可以在html的这个模板中加你想要的东西。
而且一个标签,可以加多个内容。

<div id='box'>
        <zxx>
            <button>123</button>
        </zxx>
    </div>
    <template id='pp'>
        <div>
            <span>123</span>
            <h4>1232</h4>
            <slot></slot>
        </div>
    </template>

2.slot标签里面可以放默认标签。
如果html的模板有内容,name默认标签消失,没有内容,默认标签生效。

<span>123</span>
<h4>1232</h4>
<slot><button>123</button></slot>

3.也可以具名solt标签

就是说,你可以选择哪一个slot进行替换。
slot标签加一个name熟悉,html的标签下面的zxx模板,每一个template都对应一个具名模板。

    <div id='box'>
        <zxx>
            <template v-slot:center>
                    中间变了
            </template>
            <template v-slot:right>
                    右边辩护了
            </template>
        </zxx>
    </div>
    <template id='pp'>
        <div>
            <span>123</span>
            <h4>1232</h4>
            <slot name='center'><span>中间</span></slot>
            <slot name='right'><span>右边</span></slot>
        </div>

编译作用域

下面的isshow只会找父组件的isshow不会找子组件的,同理,子组件的isshow不会找父组件的。
在这里插入图片描述
这里是在子组件的模板里面的,所以只会找子组件的isshow
在这里插入图片描述
如果你想在html的模板使用子组件的数据的话
再这个插槽里,动态绑定一个属性,其实:qq='qq’都是子组件的data的对象名。

<template id='pp'>
    <div>
        <span>123</span>
        <h4>1232</h4>
        //第一个qq就是qq,不能随便起名字
        <slot :qq='qq'>{{qq.first}}</slot>
    </div>
</template>

再这个template里面加上v-slot:default,其中zxx可以随便取

<zxx>
//zxx也可以顺便去,这样的话zxx其实就是引用了上面的第一个qq,然后第一个qq其实等于第二个qq。
    <template v-slot:default='zxx'>
        {{zxx.qq.last}}
    </template>
</zxx>

模块化开发

会有许多js文件,会导致变量的污染。
解决:1.用闭包的思维实现。每个js文件都被一个立即执行函数给封装,这样的话
js下面的所有变量都只会在这个匿名函数里面,如果要用的话,可以用闭包的思路:返回一个变量,变量下面挂着几个要用的东西,就可以了
在这里插入图片描述
2.模块化思想,commonjs,在node里面用export和require实现。
在这里插入图片描述

ES的模块语法

ES给我们提供了export,import指令来避免不同js文件的变量处理问题。
首先我们需要在html代码引入的js文件中设置类型为module,这样子每个js都相当于一个单独的包,里面的变量不会和外面的有冲突。
而且导入的话一定要是对象。

1.多个变量导出导入

let a=1;

let bb=function(){
    console.log(123);
}

export{
    a,bb
}
//导入的一定要是对象
import{a,bb} from './aaa.js'

console.log(a);
console.log(bb);

2.单个导出,导入同上

export let ab=100;

3.也可以导出函数或者类
在这里插入图片描述
4.可以导出default,但是只能在js中用一次(因为如果在这里插入代码片多次default就无法识别到底是导出哪一个)

let a=1;

export default a;

好处就是:我接受的时候可以自己命名(bbbb就可以自己命名了)

import bbbb from './aaa.js'
console.log(bbbb);

5.所有的变量都导入
可以把之前的输出的变量都获得。

import * as aaa from './aaa.js'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值