Vue的相关基础知识的应用

【vue系列】小白入门篇,一天就能掌握vue开发技巧及规则 vue入门实战 阅读详情

$ on 和 $ emit

可以为同一个事件绑定多个处理函数
// 结合分页组件来看

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<body>
    <div id="root">
        <button @click="boost">触发事件</button>
    </div>
</body>
new Vue({
    el: '#root',
    data() {
        return {
            message: 'hello vue'
        }
    },
    created() {
        // 事件调用 触发回调函数
        this.$on('my_events', this.handleEvent),
        this.$on('my_events', this.handleEvent1)
    },
    methods: {
        boost() {
            this.$emit('my_events', 'my params')
        },
        handleEvent(e) {
            console.log(e, this.message)
        },
        handleEvent1(e) {
            console.log(e, this.message)
        }
    }
})

Vue.directive

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="root" v-loading="isLoading">
        <div>{{data}}</div>
        <button @click="update">更新</button>
    </div>
    <script>
        
        Vue.directive('loading', {
            update(el, binding, vnode) {
                console.log(el, binding, vnode)
                if (binding.value) {
                    const div = document.createElement('div')
                    div.innerText = '加载中...'
                    div.setAttribute('id', 'loading')
                    div.style.position = 'fixed'
                    div.style.left = 0
                    div.style.top = 0
                    div.style.width = '100%'
                    div.style.height = '100%'
                    div.style.display = 'flex'
                    div.style.justifyContent = 'center'
                    div.style.alignItems = 'center'
                    div.style.color = 'white'
                    div.style.background = 'rgba(0,0,0,.7)'
                    document.body.append(div)
                } else {
                    document.body.removeChild(document.getElementById('loading'))
                }
            }
        })

        new Vue({
            el: '#root',
            data() {
                return {
                    isLoading: false,
                    data: ''
                }
            },
            methods: {
                update() {
                    this.isLoading = true
                    setTimeout(() => {
                        this.data = '用户数据'
                        this.isLoading = false
                    }, 3000)
                }
            }
        })
    </script>
</body>
</html>

Vue.extend

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
        #loading-wrapper {
            position: fixed;
            top: 0;
            left: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, .7);
            color: #fff;
        }
    </style>
</head>

<body>
    <div id="root">
        <button @click='showLoading'>显示loading</button>
    </div>
    <script>
        // 创建vue构造器
        const LoadingComponent = Vue.extend({
            template: '<div id="loading-wrapper">{{msg}}</div>',
            props: {
                msg: {
                    type: String,
                    default: 'loading...'
                }
            }
        })

        function Loading(msg) {
            console.log(msg)
            const div = document.createElement('div')
            div.setAttribute('id', 'loading-wrapper')
            document.body.append(div)
            if (msg) {
                new LoadingComponent({
                    props: {
                        msg: {
                            type: String,
                            default: msg
                        }
                    }
                }).$mount('#loading-wrapper')
            } else {
                new LoadingComponent().$mount('#loading-wrapper')
            }
            // 返回一个闭包
            return () => {
                document.body.removeChild(document.getElementById('loading-wrapper'))
            }
        }

        Vue.prototype.$loading = Loading
        new Vue({
            el: '#root',
            methods: {
                showLoading() {
                    const hide = this.$loading()
                    setTimeout(() => {
                        hide()
                    }, 2000)
                }
            }

        })
    </script>
</body>

</html>

Vue.use

相当于把Vue.extend上述的例子做了进一步的封装

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
        #loading-wrapper {
            position: fixed;
            left: 0;
            top: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: rgba(0, 0, 0, .7);
            width: 100%;
            height: 100%;
        }
    </style>
</head>

<body>
    <div id="app">
        <button @click="showLoading">显示loading</button>
    </div>
</body>
<script>
    const loadingPlugin = {
        install: function(vm) {
            const LoadingComponent = vm.extend({
                template: '<div id="loading-wrapper">{{msg}}</div>',
                props: {
                    msg: {
                        type: String,
                        default: 'loading...'
                    }
                }
            })
            function Loading(msg) {
                const div = document.createElement('div')
                div.setAttribute('id', 'loading-wrapper')
                document.body.append(div)
                new LoadingComponent({
                    props: {
                        msg: {
                            type: String,
                            default: '加载中...'
                        }
                    }
                }).$mount('#loading-wrapper')
                return () => {
                    document.body.removeChild(document.getElementById('loading-wrapper'))
                }
            }
            vm.prototype.$loading = Loading
        }
    }

    Vue.use(loadingPlugin)

    new Vue({
        el: '#app',
        methods: {
            showLoading() {
                const hide = this.$loading('正在加载,请稍候...')
                setTimeout(() => {
                    hide()
                }, 3000)
            }
        }
    })
</script>

</html>

分析一波分页组件

不行,要陪女朋友,这里稍后再总结。明天最好能够画个图出来

<template>
  <div :class="{'hidden':hidden}" class="pagination-container">
    <el-pagination
      :background="background"
      :current-page.sync="currentPage"
      :page-size.sync="pageSize"
      :layout="layout"
      :page-sizes="pageSizes"
      :total="total" 
      v-bind="$attrs"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</template>

<script>
import { scrollTo } from '@/utils/scroll-to'

export default {
  name: 'Pagination',
  props: {
    total: {
      required: true,
      type: Number
    },
    page: { // 起始页
      type: Number,
      default: 1
    },
    limit: {
      type: Number,
      default: 20
    },
    pageSizes: {
      type: Array,
      default() {
        return [10, 20, 30, 40, 50]
      }
    },
    layout: {
      type: String,
      default: 'total, sizes, prev, pager, next, jumper'
    },
    background: {
      type: Boolean,
      default: true
    },
    autoScroll: {
      type: Boolean,
      default: true
    },
    hidden: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    currentPage: {
      get() {
        console.log('get page: ', this.page)
        return this.page
      },
      set(val) {
        console.log('set page: ', val)
        this.$emit('update:page', val)
      }
    },
    pageSize: {
      get() {
        console.log('get limit: ', this.limit)
        return this.limit
      },
      set(val) {
        console.log('set limit: ', val)
        this.$emit('update:limit', val)
      }
    }
  },
  methods: {
    handleSizeChange(val) {
      this.$emit('pagination', { page: this.currentPage, limit: val })
      if (this.autoScroll) {
        scrollTo(0, 800)
      }
    },
    handleCurrentChange(val) {
      this.$emit('pagination', { page: val, limit: this.pageSize })
      if (this.autoScroll) {
        scrollTo(0, 800)
      }
    }
  }
}
</script>

<style scoped>
.pagination-container {
  background: #fff;
  padding: 32px 16px;
}
.pagination-container.hidden {
  display: none;
}
</style>

从零开始学习CANoe(六)—— CAPL 测试节点 创建CAPL Test Module的两种方式 阅读详情

相关推荐

单窗算法的地表温度反演:谷歌地球引擎GEE代码

该论文基于Statistical Mono-Window(SMW)算法,对地表温度加以求解。其中,简单地说,SMW算法即是通过简单的线性关系,对由单热红外波段所得的大气表观亮温与地表温度之间的经验关系加以表示,从而计算得到LST。

2301_78834737的博客 564

vue3基础知识

/ newArray 和 oldArray 都是数组,也可以写作([newCount, newName], [oldCount, oldName]),被监听的数据至少一个发生改变就会触发回调函数。// 监听obj.value.age,可以不加deep,使用箭头函数返回一个getter,保持响应式连接,Vue可以追踪依赖;* 1.可以区别,因为实际开发中,每个功能都建一个文件夹,页面入口设为index.vue,导入到文件夹即可。,返回一个响应式的对象,该对象有一个value属性,指向被包装过的值。

m0_71832608的博客 1530

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)

作为经典畅销书的升级版,本书在第1版的基础上新增了大量新知识(如闪存、UFS、测试、文件系统等),并改写或删减了许多过时或不适用的内容,总修改量超过60%。本书由SSD技术社区SSDFans的核心团队成员联合业界、高校SSD方面的专家共同完成,相对于第1版,内容更全面、更新,也更有深度。本书从产品、技术和应用3个维度展开,全面、详细讲解了SSD的发展历史、产品形态、工作原理、整体架构,以及各个功能模块的原理和使用,从SSD的前端接口协议到FTL算法,再到后端的闪存和纠错,以及测试,本书都有涉及。

阿玥的小博客 3126

VUE基础快速入门

VUE项目工程结构解析 项目中需要大家关注的主要内容:public 文件夹:里面存放静态资源文件,如:图片/视频等src/router/index.js:路由配置文件,在里面配置请求地址和 VUE 组件的映射关系src/views:在里面创建对应每个页面的*.vue 文件App.vue:此组件工程启动后自动挂载到 index.html 页面的组件,可以理解为工程的入口main.js:当需要引入其他框架或对进行配置时使用此文件

qq_54523931的博客 1475

逆向解析M团外卖mtgsig与waimai_sign加密参数实战指南⊙ω⊙

本文详细解析了M团外卖App中mtgsig与waimai_sign两个核心加密参数的逆向分析与生成方法。通过抓包定位、静态逆向与Frida动态调试,拆解了waimai_sign的RSA签名逻辑与mtgsig的复杂参数组装加密流程,并提供了Python模拟实现的框架与调试心得,为安全研究及合规数据分析提供实战指南。

weixin_29327525的博客 1285

Minecraft Forge模组开发入门:从环境搭建到事件监听实战

事件驱动编程是一种基于事件和事件监听器的软件架构模式,其核心原理是通过事件总线实现组件间的松耦合通信。在游戏开发领域,这种模式能够有效处理玩家交互、状态变更等异步操作,具有高度的灵活性和可扩展性。Java作为面向对象编程语言,通过注解和反射机制为事件驱动提供了天然支持。Minecraft模组开发正是事件驱动编程的典型应用场景,开发者可以利用Forge框架提供的事件总线监听游戏内各种行为。本文以Minecraft Forge模组开发为例,详细讲解如何通过Gradle构建工具搭建开发环境,并实现自定义方块注册和

culi3182的博客 395

Vue基础知识21-30

在输入框中输入新的全名,如 “Jane Smith”,下方的 “First Name” 和 “Last Name” 会相应更新为 “Jane” 和 “Smith”。:页面上会显示两个链接 “Home” 和 “About”,点击 “Home” 链接会显示 “Home Page”,点击 “About” 链接会显示 “About Page”。:组件懒加载可以提高应用的性能,尤其是在大型应用中。这样的动态导入语法,Vue Router 会在需要渲染该组件时才去加载对应的文件,实现了组件的懒加载。

ly1h1的博客 515

从收音机到Arduino:手把手教你用BJT三极管搭建一个简易音频放大器(附电路图与元件清单)

本文详细介绍了如何使用BJT三极管搭建简易音频放大器,涵盖电路原理、元件选择、设计步骤及调试技巧。通过实践项目帮助电子爱好者深入理解BJT的放大特性,并提供与Arduino结合的扩展应用方案,适合创客和DIY玩家。

aitie1479的博客 443

vue-router的基础知识

this

weixin_42975688的博客 98

Open3D 基于法向量夹角的特征点提取

基于法向量夹角的特征点提取是一种在点云处理中用于识别表面变化显著区域的技术。通过计算点云中每个点的法向量与其邻域点法向量之间的夹角,可以判断点云表面的局部变化程度,并提取那些法向量变化较大的点作为特征点。这种方法特别适用于提取边缘、角点等关键几何特征。

纵马踏花向自由 1554

单片机设计具备断电记忆功能的计时器

本文介绍了如何设计一款具备断电记忆功能的计时器,利用单片机和EEPROM存储器实现了计时器值的保存和恢复。当然,在实际的设计中还需要考虑其他因素,如电源管理、时钟精度等,以确保计时器的正常运行和准确性。选择合适的单片机:在设计计时器时,我们需要选择一款具备存储功能的单片机,以便在断电后能够保存计时器的状态。可以优化显示方式,使用更加直观的界面来展示计时器的值;函数中,我们首先从 EEPROM 中读取计时器的初始值,然后在一个无限循环中每秒钟增加计时器的值,并将新的值写入 EEPROM 中。

RlDart的博客 1094

vue基础知识之:v-on指令

wcdunf的博客 417

【招商银行笔试题汇总】[全网首发]2024-04-23-招商银行春秋招笔试题-三语言题解(CPP/Python/Java)

🏳️ 难难难!!!本次招商银行的笔试算是今年春招最难的场次之一了K小姐所在的公司有 NNN 个部门,编号从 111 到 NNN。由于公司网络系统比较老旧,对于同一个数据 ddd,不同部门记录的值可能不同。数据 ddd 在各部门被记录为 d1,d2,...,dNd_1, d_2, ..., d_Nd1​,d2​,...,dN​。公司提出可以通过会议来实现数据的一致性。每次会议会让相邻编号范围内的所有部门一起参加,如果有超过半数的部门能够对数据 ddd 的值达成共识,那么在此次会议后,参与会议的所有部门会将

春秋招笔试突围 3463

vue基础-tododemo

一,安装 # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack my-project # 安装依赖,走你 $ cd my-project $ npm run dev https://cn.vuejs.org/v2/guide/installation.html#%E5...

superjunjin的专栏 560

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

vue-cli目录结构分析

里面有id为app的divmain.js:new Vue({})cli里面通过webpack将mian.js加载到index.html中,也就将该Vue实例绑定到index.html的div中,components属性定义子组件,template模版在我前面的博客中讲过,template的优先级比el高,将替换为经过上面一系列步骤,index.html中就变为中的内容,App就是导入的组件,所以index.html就显示App.vue中的内容App.vue。

2401_84438488的博客 622

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Vue入门

MVVM,一种更好的UI模式解决方案,MVVM通过数据双向绑定让数据自动地双向同步MVVMM:model数据模型(JSON)V:view视图(JSP、HTML)VM:ViewModel 视图模型V(修改数据) -> M 将视图层的数据通过事件将数据提交到后端服务器 onclickM(修改数据) -> V 将后端数据(JSON)通过赋值的方式在视图层展现 $('#id').val()数据是核心注1:虽然没有完全遵循MVVM模型,Vue的设计无疑受到了它的启发。

m0_63300795的博客 128

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

vue保姆级教程----深入了解 Vue3计算属性_vue3使用计算属性初始化值(1)

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】🔔 上述专栏,都在不定期持续更新中!!!!!!!

2401_84446712的博客 537

去掉空格 v vue_2年Vue项目实战经验汇总!

前言vue作为前端主流的3大框架之一,目前在国内有着非常广泛的应用,由于其轻量和自底向上的渐进式设计思想,使其不仅仅被应用于PC系统,对于移动端,桌面软件(electronjs)等也有广泛的应用,与此诞生的优秀的开源框架比如elementUI,iView, ant-design-vue等也极大的降低了开发者的开发成本,并极大的提高了开发效率。笔者最初接触vue时也是使用的iview框架,亲生体会之...

weixin_29476595的博客 197

vue面试

1.一个比较全的vue面试题 http://www.bslxx.com/p/3187.html 转载于:https://www.cnblogs.com/coding4/p/7953417.html

87

day01 Vue3基础

Vue前提准备

m0_58207145的博客 144

记录-前端相关学习网站

js:https://www.w3school.com.cn/js/index.asp ts:https://www.tslang.cn/docs/handbook/typescript-in-5-minutes.html es6:https://es6.ruanyifeng.com/ vue:https://cn.vuejs.org/v2/guide/computed.html vuex:https://vuex.vuejs.org/zh/guide/state.html ant desv...

severe777777的博客 142

Vue核心

Vue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅容易上手,还便于与第三方库或既有项目整合。

m0_52704461的博客 275

探索Vue.js的无限可能 —— vuejs-challenges

挑战自我,共同成长,Vue.js挑战等你来战!

2401_83063795的博客 2865

面向开发人员 的终极 VueJS 资源

在 10 小时内构建 10 个项目 使用 Vue 3 组合 API - 设置、传送、反应和引用 Vue 3 教程将从非常基础的内容开始,通过构建 10 个不同的应用程序,教您如何在 10 个小时的完整课程中将 TensorFlow 和 firebase 与您的 Vuejs 一起使用。它是从头开始设计的,根据您的目标,可以很容易地成为一个库和一个框架。VueJS 示例,顾名思义,它是示例的集合,例如简单且可自定义的步骤进度指示器、Vue 汽车贷款计算器、通知/Toast 组件等使用 VueJS 制作的项目。

码上全栈创享家官方号,小红书、公众号、抖音、b站,youtube等同名,欢迎各位码农一起来学习! 2868

提升Vue开发效率的利器:vuejs-devtools

提升Vue开发效率的利器:vuejs-devtools 【下载地址】Vue开发工具vuejs-devtools安装教程及常见问题解决 Vue开发工具vuejs-devtools安装教程及常见问题解决本文详细介绍了如何安装Vue开发工具vuejs-devtools,并提供了常见问题的解决方法 ...

gitblog_06522的博客 750

推荐:Vue.js 官方文档日语版项目 - vuejs/jp.vuejs.org

推荐:Vue.js 官方文档日语版项目 - vuejs/jp.vuejs.org 在这个飞速发展的前端世界里,拥有清晰、详尽的文档是至关重要的。Vue.js,作为一款轻量级但功能强大的渐进式框架,其官方文档一直是开发者的重要学习资源。现在,对于日语使用者来说,有一个绝佳的机会,那就是参与并使用由社区维护的 vuejs/jp.vuejs.org 项目,它提供了 Vue.js 2.x 版本的日语文档。...

gitblog_00009的博客 1182
上一篇: Vue.extend源码分析
下一篇: nodejs实现日志功能
ccxCode
博客等级 码龄8年 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值