iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >7个很棒的Vue开发技巧分享
  • 179
分享到

7个很棒的Vue开发技巧分享

Vue开发技巧Vue技巧 2023-02-08 12:02:47 179人浏览 泡泡鱼
摘要

目录1.路由参数解耦2.功能组件3.样式范围4.watch的高级使用5.watch监听多个变量6.事件参数$event7.程序化事件监听器1.路由参数解耦 通常在组件中使用路由参数,

1.路由参数解耦

通常在组件中使用路由参数,大多数人会做以下事情。

export default {
    methods: {
        getParamsId() {
            return this.$route.params.id
        }
    }
}

在组件中使用 $route 会导致与其相应路由的高度耦合,通过将其限制为某些 URL 来限制组件的灵活性。正确的做法是通过 props 来解耦。

const router = new VueRouter({
    routes: [{
        path:  /user/:id ,
        component: User,
        props: true
    }]
})

将路由的 props 属性设置为 true 后,组件内部可以通过 props 接收 params 参数。

export default {
    props: [ id ],
    methods: {
        getParamsId() {
            return this.id
        }
    }
}

您还可以通过功能模式返回道具。

const router = new VueRouter({
    routes: [{
        path:  /user/:id ,
        component: User,
        props: (route) => ({
            id: route.query.id
        })
    }]
})

2.功能组件

功能组件是无状态的,它不能被实例化,也没有任何生命周期或方法。创建功能组件也很简单,只需在模板中添加功能声明即可。它一般适用于只依赖于外部数据变化的组件,并且由于其轻量级而提高了渲染性能。组件需要的一切都通过上下文参数传递。它是一个上下文对象,具体属性见文档。这里的 props 是一个包含所有绑定属性的对象。

<template functional>
    <div class="list">
        <div class="item" v-for="item in props.list" :key="item.id" @click="props.itemClick(item)">
            <p>{{item.title}}</p>
            <p>{{item.content}}</p>
        </div>
    </div>
</template>

父组件使用

<template>
    <div>
        <List :list="list" :itemClick="item => (currentItem = item)" />
    </div>
</template>
import List from  @/components/List.vue
export default {
    components: {
        List
    },
    data() {
        return {
            list: [{
                title:  title ,
                content:  content
            }],
            currentItem:
        }
    }
}

3.样式范围

开发中修改第三方组件样式很常见,但是由于scoped属性的样式隔离,可能需要去掉scoped或者另起一个样式。这些做法有副作用(组件样式污染,缺乏优雅),在CSS预处理器中使用样式渗透来生效。我们可以使用 >>> 或者 /deep/ 来解决这个问题:

<style scoped>
Outer layer >>> .el-checkbox {
  display: block;
  font-size: 26px;
 
  .el-checkbox__label {
    font-size: 16px;
  }
}
</style>
<style scoped>
/deep/ .el-checkbox {
  display: block;
  font-size: 26px;
 
  .el-checkbox__label {
    font-size: 16px;
  }
}
</style>

4.watch的高级使用

watch 在监听器属性发生变化时触发,有时我们希望 watch 在组件创建后立即执行。可能想到的方式是在创建生命周期中调用它一次,但这不是一种优雅的编写方式,所以也许我们可以使用这样的东西。

export default {
    data() {
        return {
            name:  Joe
        }
    },
    watch: {
        name: {
            handler:  sayName ,
            immediate: true
        }
    },
    methods: {
        sayName() {
            console.log(this.name)
        }
    }
}

Deep Listening

监听一个对象时,当对象内部的属性发生变化时,watch是不会被触发的,所以我们可以为它设置深度监听。

export default {
    data: {
        studen: {
            name:  Joe ,
            skill: {
                run: {
                    speed:  fast
                }
            }
        }
    },
    watch: {
        studen: {
            handler:  sayName ,
            deep: true
        }
    },
    methods: {
        sayName() {
            console.log(this.studen)
        }
    }
}

触发监听器执行多个方法

使用数组,您可以设置多个形式,包括字符串、函数、对象。

export default {
    data: {
        name:  Joe
    },
    watch: {
        name: [
             sayName1 ,
            function(newVal, oldVal) {
                this.sayName2()
            },
            {
                handler:  sayName3 ,
                immaediate: true
            }
        ]
    },
    methods: {
        sayName1() {
            console.log( sayName1==> , this.name)
        },
        sayName2() {
            console.log( sayName2==> , this.name)
        },
        sayName3() {
            console.log( sayName3==> , this.name)
        }
    }
}

5.watch监听多个变量

watch 本身不能监听多个变量。但是,我们可以通过返回具有计算属性的对象然后监听该对象来“监听多个变量”。

export default {
    data() {
        return {
            msg1:  apple ,
            msg2:  banana
        }
    },
    compouted: {
        msGobj() {
            const { msg1, msg2 } = this
            return {
                msg1,
                msg2
            }
        }
    },
    watch: {
        msgObj: {
            handler(newVal, oldVal) {
                if (newVal.msg1 != oldVal.msg1) {
                    console.log( msg1 is change )
                }
                if (newVal.msg2 != oldVal.msg2) {
                    console.log( msg2 is change )
                }
            },
            deep: true
        }
    }
}

6.事件参数$event

$event 是事件对象的一个特殊变量,它在某些场景下为我们提供了更多的可用参数来实现复杂的功能。本机事件:与本机事件中的默认事件对象行为相同。

<template>
    <div>
        <input type="text" @input="inputHandler( hello , $event)" />
    </div>
</template>
export default {
    methods: {
        inputHandler(msg, e) {
            console.log(e.target.value)
        }
    }
}

自定义事件:在自定义事件中表示为捕获从子组件抛出的值。

export default {
    methods: {
        customEvent() {
            this.$emit( custom-event ,  some value )
        }
    }
}
<template>
    <div>
        <my-item v-for="(item, index) in list" @custom-event="customEvent(index, $event)">
            </my-list>
    </div>
</template>
export default {
    methods: {
        customEvent(index, e) {
            console.log(e) //  some value
        }
    }
}

7.程序化事件监听器

例如,在页面挂载时定义一个定时器,需要在页面销毁时清除定时器。这似乎不是问题。但仔细观察,this.timer 的唯一目的是能够在 beforeDestroy 中获取计时器编号,否则是无用的。

export default {
    mounted() {
        this.timer = setInterval(() => {
            console.log(Date.now())
        }, 1000)
    },
    beforeDestroy() {
        clearInterval(this.timer)
    }
}

如果可能,最好只访问生命周期挂钩。这不是一个严重的问题,但可以认为是混乱。我们可以通过使用 或once 监听页面生命周期销毁来解决这个问题:

export default {
    mounted() {
        this.creatInterval( hello )
        this.creatInterval( world )
    },
    creatInterval(msg) {
        let timer = setInterval(() => {
            console.log(msg)
        }, 1000)
        this.$once( hook:beforeDestroy , function() {
            clearInterval(timer)
        })
    }
}

使用这种方法,即使我们同时创建多个定时器,也不影响效果。这是因为它们将在页面被销毁后以编程方式自动清除。8.监听组件生命周期通常我们使用 $emit 监听组件生命周期,父组件接收事件进行通知。

子组件

export default {
    mounted() {
        this.$emit( listenMounted )
    }
}

父组件

<template>
    <div>
        <List @listenMounted="listenMounted" />
    </div>
</template>

其实有一种简单的方法就是使用@hook 来监听组件的生命周期,而不需要在组件内部做任何改动。同样,创建、更新等也可以使用这个方法。

<template>
    <List @hook:mounted="listenMounted" />
</template>

到此这篇关于7个很棒的Vue开发技巧分享的文章就介绍到这了,更多相关Vue开发技巧内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 7个很棒的Vue开发技巧分享

本文链接: https://www.lsjlt.com/news/195138.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 7个很棒的Vue开发技巧分享
    目录1.路由参数解耦2.功能组件3.样式范围4.watch的高级使用5.watch监听多个变量6.事件参数$event7.程序化事件监听器1.路由参数解耦 通常在组件中使用路由参数,...
    99+
    2023-02-08
    Vue开发技巧 Vue技巧
  • 八个一看就觉得很棒的Vue开发技巧分享
    目录1.路由参数解耦2.功能组件3.样式范围4.watch的高级使用5.watch监听多个变量6.事件参数$event7.程序化事件监听器8.监听组件生命周期总结1.路由参数解耦 通...
    99+
    2023-05-14
    vue开发小技巧 vue开发流程 vue实战
  • 分享7个成为更好的Vue开发者的技巧
    目录1、脚本设置2、如何覆盖反应对象3、反应式 CSS4、全局组件5、组合 API 优于选项 API6、使用 v-once 或 v-memo 提高性能7、组件的异步加载1、脚本设置 ...
    99+
    2024-04-02
  • Vue开发的36个技巧分享
    本篇内容介绍了“Vue开发的36个技巧分享”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言Vue 3.x...
    99+
    2024-04-02
  • 7 个很棒且实用的React 组件库(压箱底分享)
    2022 年只剩下 2 个月,在这快一年的开发过程中,我觉得是时候总结了 7 个很棒的、日常开发中常用的 React 组件库。【相关推荐:Redis视频教程、编程视频】1. tremorTremor 是一个快速构建 Dashboard 的 ...
    99+
    2022-11-22
    前端 React.js
  • 【整理分享】8 个实用Vue开发技巧
    本篇文章整理分享8 个很棒的 Vue 开发技巧,包括路由参数解耦、功能组件、样式范围、watch的高级使用、watch监听多个变量等,希望对大家有所帮助!1.路由参数解耦通常在组件中使用路由参数,大多数人会做以下事情。export defa...
    99+
    2023-05-14
    Vue
  • 总结分享10个超棒的JavaScript简写技巧
    目录1.合并数组2.合并数组(在开头位置)3.克隆数组4.解构赋值5.模板字面量6.For循环7.箭头函数8.在数组中查找对象9.将字符串转换为整数10.短路求值补充几点编码习惯1....
    99+
    2024-04-02
  • 分享7个杀手级JS小技巧
    目录一、数组乱序二、复制到剪贴板三、数组去重四、检测黑暗模式五、滚动到顶部六、滚动到底部七、生成随机颜色一、数组乱序 在使用需要某种程度的随机化的算法时,你会经常发现洗牌数组是一个相...
    99+
    2024-04-02
  • 分享9个Vue的巧妙冷技巧
    目录前言1. 巧用$attrs和$listeners2. 巧用$props3. 妙用函数式组件4. 妙用 Vue.config.devtools5. 妙用 methods6. 妙用 ...
    99+
    2024-04-02
  • 7个Python中的隐藏小技巧分享
    目录前言1、功能属性2、不完整代码的占位符3、 eval() 函数4、在 Python 解析器中使用以下命令启动文件托管服务器5、无限参数6、Zip() 方法7、旋转列表前言 Pyt...
    99+
    2023-03-20
    Python隐藏技巧分享 Python隐藏技巧 Python技巧
  • Java中不常用但很好用的开发小技巧分享
    目录BigDecimalcompareToListtoArrayJDK8的小玩意flatMap其实干 Java 开发,必然离不开一些计算,比如如果你现在工作是服务...
    99+
    2023-05-18
    Java好用开发技巧分享 Java开发技巧 Java技巧
  • 10个很棒的 JavaScript 字符串技巧是怎样的
    10个很棒的 JavaScript 字符串技巧是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们称一个字符序列为字符串。这几乎是所有编...
    99+
    2024-04-02
  • 分享12个Vue开发中的性能优化小技巧(实用!)
    目录前言1. 长列表性能优化1. 不做响应式2. 虚拟滚动2. v-for 遍历避免同时使用 v-if3. 列表使用唯一 key4. 使用 v-show 复用 DOM5. 无状态的组...
    99+
    2024-04-02
  • 7个perl数组高级操作技巧分享
    1. 使用map函数对数组中的每个元素进行操作:```perlmy @array = (1, 2, 3, 4, 5);my @new_array = map { $_ * 2 } @array;# 输出:(2, 4, 6, 8, 10)...
    99+
    2023-08-09
    perl
  • 总结5个前端开发中很棒的资源
    以上就是总结5个前端开发中很棒的资源的详细内容,更多请关注编程网其它相关文章!...
    99+
    2023-05-14
    资源 前端
  • Golang开发经验分享:提升开发效率的几个技巧
    Golang,一门自 Google 开发的开源编程语言,拥有高效且简洁的语法,以及出色的并发性能,近年来受到越来越多开发者的青睐。在使用 Golang 进行开发的过程中,为了提升开发效率,我们可以使用一些技巧和工具来简化工作流程。本文将分享...
    99+
    2023-11-22
    并发编程 错误处理 编译优化
  • 今天分享几个少见却很有用的 JS 技巧
    1. “返回”按钮 使用 history.back() 可以创建一个浏览器“返回”按钮。 <button onclick="history.back()"> ...
    99+
    2024-04-02
  • JavaScript开发的七个实用小技巧(很有用)
    目录1. 数组求和2. 使用 length 属性更改数组3. 数组元素随机打乱4. 过滤唯一值5. 逗号运算符6. 使用数组解构交换数据元素7. 使用 && 代替 I...
    99+
    2024-04-02
  • Vue中$once的两个实用小技巧分享
    目录前言清除定时器$once/$emit + async/await 实现 Dialog 同步执行总结前言 在 Vue 中有很多 API 都有很实用的地方,只是需要挖掘适用的场景,这...
    99+
    2024-04-02
  • 关于TypeScript开发的6六个实用小技巧分享
    目录1. 开发之前确定实体类型 2. 请求接口时只需要定义自己需要用到的字段 3. 使用枚举类型 4. DOM元素的类型要正常给 5.对象的类型要怎么给 6.结构赋值时类型怎么给 总...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作