自定义事件、ref属性、动态组件、插槽、自定义指令

子组件向父组件传值

自定义事件

eg

兄弟组件之间的数据共享:现成的解决方案

EventBus

  1. 创建eventBus.js模块,并向外共享一个Vue实例对象
  2. 在数据发送方,调用bus.$emit(‘事件名称’,要发送的数据)方法触发自定义事件
  3. 在数据接受方,调用bus.$on(‘事件名称’,事件处理函数)方法注册一个自定义事件

复习总结:内置的对象$evet用来

卸载安装包命令:npm uni vue -s

循环渲染指令:v-for还需要绑定一个key属性,不然有些包里面会报错,拿索引当key没有意义!!

computed节点:在定义的时候要定义成function;在使用的时候,作为普通属性使用即可;要return 一个计算的结果;只要任何一个依赖的数据项发生变化,计算属性就会重新计算。

ref引用操作DOM

在vue中,不建议安装和使用jQuery

每一个vue组件的实例上都包含一个$refs对象,里面存储着对应的DOM对象或者组件的引用。默认情况下,组件的$refs指向一个空对象!!

给标签添加一个ref属性并起一个名字,通过this.$refs…就可以拿到dom元素的引用,多个dom元素的名字不能冲突!!

使用ref引用组件的实例:

this.$nextTick(callback)会将回调函数推迟到下一个DOM更新周期之后执行,等DOM元素更新之后在来执行回调函数!!

不能使用updated的原因:只要数据发生变化就要触发相应的操作,是以数据为主的,和按钮点击不一样!

数组的every方法:判断数组的每一项是否都满足条件,如果都满足就返回true,如果不满足就返回false。

数组的数组的reduce方法:

        const sum = arr.filter(item => item.state).reduce((sum, item) => {

            return sum += item.price * item.count

        }, 0)

reduce中的两个参数:(累加的结果,当前循环项)=>{基本表达式},初始值

返回一个累加的结果

动态组件

我们需要动态的增删某个组件的时候需要用到!!

调用<component :is="left"></component>就能动态的创建组件。component标签是vue内置的。

keep-alive可以保存内部的组件没有被销毁!!

keep-alive对应的生命周期函数

当组件第一次被创建的时候既会执行created生命周期也会执行activated生命周期

当组件再次被激活的时候不会触发created。

include属性可以指定被缓存的组件,可以多个组件名称同时写用,隔开,exclude排除不被缓存两个只能使用一个,不能同时用。

如果在声明组件的时候没有为组件指定name名称,则组件的名称默认就是注册时候的名称。当提供了组件name属性之后就要使用name属性声明的名称!!

组件的注册名称的应用场景是以标签的形式把注册好的组件渲染到页面结构中

组件声明的name名称的主要应用场景是结合keep-alive标签实现组件的缓存功能,在调试工具中能够显示出来的名称

插槽

使用my-com标签,可以自定义组件的某部分ui结构

每一个slot插槽都要有一个name名称,如果省略name属性有一个默认的名称default

如果要把内容填入到指定name的插槽中v-slot后面要跟插槽的名称,指令不能直接用于元素身上,要使用template标签上(是一个虚拟的标签,起包裹作用不会被渲染成实质性的标签元素)

v-slot简写成#;要想在slot插槽中提供一个默认的内容可以直接写在slot标签里面

vant组件库

具名插槽:具有具体名字的插槽

作用域插槽:

在封装组件时为预留的<slot>提供属性对应的值,这种用法叫做“作用域插槽”

同时可以对scope进行解构直接访问其属性。

$event也可以在插槽中使用,当val被覆盖的时候可以传递!

自定义指令

通过binding获取指令的参数值

bind方法只有在元素第一次被绑定到元素上的时候,会立即触发bind函数,其余情况下不会被触发,为了解决这个缺点,我们使用update函数可以在数据发生改变之后重新触发。

如果update和bind函数的机构体相同,我们可以简化写法,可以将color写成函数的形式。

定义全局自定义指令:

eslint:约束代码风格的一种工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用Vue3的Composition API来封装一个打印组件。 首先,在组件中引入`ref`和`toRef`,`ref`用于创建响应式变量,`toRef`用于将一个普通变量转换成响应式变量。 在模板中,可以使用`v-if`来控制打印内容的显示与隐藏。 以下是一个简单的打印组件示例: ```html <template> <div> <div v-if="printVisible" ref="printContent"> <!-- 打印内容 --> <slot></slot> </div> <button @click="print">打印</button> </div> </template> <script> import { ref, toRef } from 'vue'; export default { setup() { const printVisible = ref(false); const printContent = toRef(this.$refs, 'printContent'); // 打印 const print = () => { printVisible.value = true; setTimeout(() => { window.print(); printVisible.value = false; }, 100); }; return { printVisible, printContent, print, }; }, }; </script> ``` 上述示例中,使用`ref`创建了一个名为`printVisible`的响应式变量,用于控制打印内容的显示与隐藏。使用`toRef`将`this.$refs.printContent`转换为响应式变量`printContent`,用于获取打印内容的DOM元素。 在`print`函数中,将`printVisible`设置为`true`,显示打印内容,然后使用`setTimeout`延迟100ms,等待DOM更新完成后再执行`window.print()`打印操作。打印完成后,将`printVisible`设置为`false`,隐藏打印内容。 在模板中,使用`v-if`指令根据`printVisible`的值来控制打印内容的显示与隐藏。`button`元素绑定`click`事件调用`print`函数,触发打印操作。 需要注意的是,该示例中只是实现了打印操作,打印内容需要根据实际需求进行自定义。可以通过组件插槽(slot)来实现自定义打印内容。在组件模板中使用`<slot></slot>`标签来定义插槽,然后在使用组件时,通过插槽来传入打印内容。例如: ```html <template> <Print> <h1>打印内容</h1> <p>打印时间:{{ printTime }}</p> </Print> </template> <script> import Print from './Print.vue'; export default { components: { Print, }, data() { return { printTime: new Date().toLocaleString(), }; }, }; </script> ``` 在上述示例中,使用`<Print>`标签来调用打印组件,同时在组件中定义了一个插槽,用于传入打印内容。在打印内容中,使用了一个数据属性`printTime`来表示打印时间,该属性可以在组件外部定义并传入。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

益智竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值