Vue2指令原理手写

vue2学习文档 vue2的基础语法及相关插件使用 阅读详情

文件结构

index.js

/*
 * @Author: RealRoad
 * @Date: 2024-10-31 17:13:50
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-10-31 17:15:57
 * @Description: 
 * @FilePath: \project_10_08\vite-project\src\testVue\index.js
 */
import Vue from './Vue.js'
window.Vue=Vue

Vue.js

import Compile from './Compile.js'
import observe from './observe.js'
export default class Vue{
    constructor(options){
        //把参数options对象存为$options
        this.$options = options ||{}
        //数据
        this._data=options.data || undefined;
        Observe(this._data)
        //数据要变为响应式的


        //模板编译
        new Compile(options.el,this)
    }
}

Compile.js

/*
 * @Author: RealRoad
 * @Date: 2024-10-31 16:25:34
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-10-31 16:28:44
 * @Description: 
 * @FilePath: \project_10_08\vite-project\src\testVue\Compile.js
 */
export default class Compile{
    constructor(el,vue){
        //vue实例
        this.$vue=vue;
        //挂载点
        this.$el=document.querySelector(el)
        if(this.$el){
            //调用函数,让节点变为fragment,类似与mustache中的tokens。
            //实际上用的是AST,这里就是轻量级的,fragment
           let $fragment= this.node2Fragment(this.$el);
            //编译
            this.compile($fragment);


    }
}
    node2Fragment(el){
        var fragment=document.createDocumentFragment();
        var child;
        //el为第一个子元素,循环添加到fragment中

        //让所有dom节点都添加到fragment中
        while(child=el.firstChild){
            fragment.appendChild(child);
        }

        return fragment
    }
    compile(el){
        //获取所有子节点
        var childNodes=el.childNodes;
        var self=this
        //遍历所有子节点
        for(let i=0,len=childNodes.length;i<len;i++){
            let node=childNodes[i];
            //判断是否是元素节点
            if(node.nodeType===1){
                self.compileElement(node);
            }else if(node.nodeType===3){
                self.compileText(node);
        }}

     }
     compileElement(node){
        //获取所有属性节点
        var attributes=node.attributes;
       
        //类数组变为数组
        [].slice.call(attributes).forEach(attr=>{
            if(attr.name==="v-model"){
                //获取属性值
                var value=attr.value;
                node.addEventListener("input",()=>{
                    this.$vue[value]=node.value
                })
            }else if(attr.name==="v-text"){
                node.textContent=this.$vue[attr.value]
            }
            else if(attr.name==="v-html"){
                node.innerHTML=this.$vue[attr.value]

             }
             else if(attr.name==="v-bind"){
                node.setAttribute(attr.value,this.$vue[attr.value])
            }
            else if(attr.name==="v-on"){
                node.addEventListener(attr.value,()=>{

             })}else if(attr.name==="v-show"){
                node.style.display=this.$vue[attr.value]===true?"":"none"

              }else if(attr.name==="v-if"){
                node.style.display=this.$vue[attr.value]===true?"":"none"}
                

        })
    }
    compileText(){

    }
}

 

 

 

vue2中的指令 视图编译,v-if/v-show等编译成一个对象,对象中指令的名字、值,渲染的时候根据指令的名字和值来控制。单行文本框/文本域:v-model状态值是什么就显示什么,@input/@change,都会去做事件绑定,input或者change事件,然后拿到表单项的值或者选中去修改状态值。给函数了传递参数,这样就不需要bind那些,因为是根据vue内部视图编译机制有关。视图编译先编译v-for,循环每一项创建一个li,v-for立即创建;的时候,识别v-xxx,对不同指令做不同处理。v-if:移除dom结构。 阅读详情

相关推荐

python编程实现制作网络流量监控动画

c,实时显示网络带宽使用情况,用柱状图或折线图表示不同时间段的流量变化。通过 Python编程实现图形库(如 Pygame、Tkinter、Matplotlib 等)来实现计算机网络基础概念的可视化动画。global bars # 声明 bars 为全局变量。# 获取当前网络流量。# 创建图形和坐标轴。

qq_42788199的博客 718

手写实现简易Vue框架(以v-model指令为例)

手写实现简易Vue框架(以v-model指令为例) 作为前端最火的框架之一,Vue是MVVM设计模式实现的典型代表,什么是MVVM呢?MVVM是Model-View-ViewModel的简写,M - 数据模型(Model),V - 视图层(View),VM - 视图模型(ViewModel),它本质上就是MVC 的改进版。 MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。 mvvm 实现原理的可以用下图简略表示 前端页面中,把Model用纯JavaScript

m0_37630266的博客 2437

zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS

vitis2023.1直接支持W25Q256JVEQ。

FPGA艺术家的博客 678

vue部分手写面试题

vue部分手写面试题

AndyWangWangWang的博客 1254

102、栅极驱动芯片选型与设计

文章摘要 本文分享了栅极驱动芯片选型与设计的实战经验。通过一次因驱动芯片选型不当导致的炸管事故,作者总结了栅极驱动芯片选型的五个关键参数:峰值驱动电流、驱动电压范围、传播延迟匹配、欠压锁定和隔离等级。文章详细分析了自举电路设计中的常见陷阱,以及栅极电阻对开关特性的影响,并强调了PCB布局布线的重要性。最后,作者提供了七条实用建议,包括避免通用型驱动芯片、关注CMTI参数、使用插件电阻等。核心观点是:栅极驱动设计需要综合考虑参数匹配、电路布局和实际调试,示波器实测波形是验证设计的唯一标准。

2401_88858637的博客 45

SAP 系统里生成 PDF 的几条主干路径:从 Spool 转换到 Adobe 原生渲染,再到 BTP 云服务

本文系统梳理了SAP生态中PDF生成的多种技术方案,包括Spool转换、OTF转换、Smart Forms/Adobe Forms原生生成以及云端服务等不同路径。文章通过实际案例和代码示例,详细分析了各方案的适用场景、技术要点和工程实践建议,特别强调了多语言支持、字体处理、性能优化等关键因素。针对不同业务需求,提供了从简单导出到复杂交互式PDF的完整解决方案框架,为SAP环境下的PDF处理提供了实用指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 289

手写 vue 自定义指令(directive) v-loading 加载,项目实战

手写 vue 自定义指令 v-loading 目标效果: 在vue项目的标签里面使用 v-loading="true" ,如同element-ui里面使用v-loading一样 会展示loading 效果。 在这里我做两个laoding效果: 一个全屏的loading效果,用于进入页面的时候使用loaidng 一个局部的load 效果,用户分页或者加载部分内容的时候load效果 目录结构 > 多余的文件夹就不展示了 > loading里面的5个文件创建好,把代码复制进去,然后在ma

酱子 2557

【数据分析八步法】将模糊需求转化为可验证的分析问题

国内访问Huggingface官方源常遇网络问题,可通过切换国内镜像提升下载速度。三种配置方式:1)设置HF_ENDPOINT环境变量;2)在from_pretrained中直接指定镜像参数;3)修改本地Huggingface配置文件。常用镜像包括hf-mirror.com、阿里云ModelScope和清华镜像源。注意镜像同步延迟、私有模型限制,建议配合huggingface-cli工具使用,必要时取消代理设置。合理配置镜像源可显著改善Huggingface生态使用体验。

Mr数据杨 858

Vue的双向数据绑定

1、原理 Vue的双向数据绑定的原理相信大家也都十分了解了,主要是通过Object对象的defineProperty属性,重写data的set和get函数来实现的,这里对原理不做过多描述,主要还是来实现一个实例。为了使代码更加的清晰,这里只会实现最基本的内容,主要实现v-model,v-bind 和v-click三个命令,其他命令也可以自行补充。 添加网上的一张图 2、实现 ...

235

2026爬虫反爬终极对抗:AST解混淆+算法还原+Python复现全流程实战

本文分享了破解JS加密参数的完整流程,重点介绍AST解混淆和算法还原方法。针对电商网站常见的混淆手段(变量名混淆、控制流平坦化、字符串加密等),作者提出一套高效解决方案:通过AST解析还原可读代码,结合Chrome断点调试定位加密函数,最后用Python精准复现加密逻辑。文章包含具体的代码实现,如字符串数组还原的AST操作示例,并详细说明了从样本采集到验证测试的全流程。该方法已成功应用于10多个网站,将破解时间从一周缩短至一天,为处理JS加密参数提供了可复用的技术方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1526

学Simulink——基于Simulink的AUTOSAR架构下电机控制软件组件建模

本文详细介绍了在Simulink中基于AUTOSAR架构开发电机控制软件组件(SWC)的全流程。主要内容包括:首先阐述了AUTOSAR架构对汽车电子系统开发的价值,包括提高软件复用率、降低集成成本和改善验证环境。然后重点讲解了在Simulink中构建电机控制SWC的具体步骤:从创建AUTOSAR组件模型、定义数据端口和服务端口,到搭建FOC控制算法、配置运行实体,最后生成AUTOSAR描述文件和验证RTE接口。文章还提供了与基础软件(BSW)的集成方案、工程实践要点和常见问题解决方案,并以大众MEB平台等实

amy_mhd的博客 68

vue自定义指令之手写v-loading指令

先看效果 自定义加载效果的loading指令 为什么不创建一个组件来加载loading效果: 麻烦你得先引入组件,注册挂载组件,然后在通过v-if在空子显示隐藏 为什么要用自定义loading指令: 由于项目中很多地方需要用到,在哪个元素或者组件直接使用v-xx就可以了方便 不过前提是需要用到的地方多,不然要么不用,要么不要在全局注册,局部注册就行 如何定义 首先得了解自定义指令的钩子函数 bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

weixin_41277748的博客 2589

部署与可视化系统:零基础到精通:LabVIEW 调用 YOLO 动态链接库(DLL)的保姆级视觉检测系统融合实战

LabVIEW与YOLO26深度集成:工业视觉检测新范式 本文揭示了LabVIEW与最新YOLO26模型深度集成的创新方案,通过C++封装ONNX Runtime为DLL,在LabVIEW中实现端到端视觉检测。核心突破点包括: 技术选型:对比YOLOv5/YOLOv8/YOLO26性能,YOLO26在CPU推理速度提升43%,支持NMS-Free端到端推理 部署架构:提供ONNX Runtime C++ API和TensorRT两种DLL封装路径,适配不同硬件环境 工程实现:详细展示从PyTorch模型导出

ZXSXJ的博客 283

手写 Vue2 系列 之 初始渲染

实现 Vue.js 的初始渲染过程,涉及内容包括: render helper、VNode、patch 初始渲染、指令、实例化子组件、插槽的处理

m0_66439275的博客 1001

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

vue学习—基于vue的Mvvm知识点(从0到1手撸mvvm实现)

vue知识点总结(持续更新)一、Vue2知识点1、MVVM是什么1.简述2.MVVM模式的组成部分3.View与ViewModule连接可以通过下面的方式4.MVVM优点2、vue入门知识点 一、Vue2知识点 1、MVVM是什么 1.简述 MVVM是Model(模型)-View(视图)-ViewModel(视图模型)的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。 2.MVVM模式的组成部分 模型:代表内容的数据访问层(以数据为

xun__xing的博客 444

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

响应式原理(Vue2.x)下篇

吃透vue2.x响应式。

Ethan's Blog 401

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

学会一个手写一个简单的vue(1)-含视频

前言 想直接看视频的可以点击下面 视频观看我的手写简单vue全过程 本片文章的讲解步骤不完全按照视频里写代码的思路,但是有详细注释 准备工作 先看下面这张图,我是按照这张图的思路一步一步写的 由于时间原因 ,视频录制中已经把vue的响应式核心的部分串联,但是编译解析部分还只写了mustuche,v-html,v-text的编译解析代码,后面会进一步完善v-model,v-bind等一系列指令 先建立一个文件夹,里面放置index.html如下,然后建立下面引入的几个文件 observer.js和compi

weixin_43342105的博客 488

Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

ranran0306的博客 9720

深入了解Vue 2响应式原理,并手写一个简单的Vue

1. Vue 2的响应式原理 Vue.js 一个核心思想是数据驱动。所谓数据驱动是指视图是由数据驱动生成的,对视图的修改,不会直接操作 DOM,而是通过修改数据。vue.js里面只需要改变数据,Vue.js通过Directives指令去对DOM做封装,当数据发生变化,会通知指令去修改对应的DOM,数据驱动DOM的变化,DOM是数据的一种自然的映射。vue.js还会对View操作做一些监听(DOM Listener),当我们修改视图的时候,vue.js监听到这些变化,从而改变数据。这样就形成了数据的双向绑定。

Niall_Tonshall的博客 2899

从Vue2到Vue3【七】——Vue2中响应式原理的实现及其缺陷

本文将探讨Vue 2响应式原理及其存在的缺陷与解决办法。Vue 2的响应式数据机制在大多数情况下能够满足我们的需求,但也存在一些缺陷。首先,Vue无法直接响应新增的属性,需要使用特定的方法进行补救。其次,对于数组的变动和对象属性的删除,Vue也无法直接进行响应式处理,需要使用相应的方法来触发更新。这些缺陷在实际开发中可能会带来一些困扰。

悟其浅而深修,沉其心而精进 7708

Vue自定义指令介绍及原理

Vue自定义指令 Vue指令: 在使用Vue框架进行前端开发时,我们经常会使用一些特殊指令来快速实现一些效果或功能。 常见指令如:v-bind、v-if (v-else)、v-show、v-html等等都是一些比较常用的指令 由于本文主要介绍自定义指令相关的一些知识,所以对于Vue自带指令就不做过多赘述了 在这情况下,Vue官方也推出了一种编写自定义指令的方法。我们可以定义开发我们自定义的模版指令,来对一些特殊的需求效果功能进行开发与实现 ...

deft_的博客 3125

Vue指令实现原理

自定义指令是`vue`中使用频率仅次于组件,其包含`bind`、`inserted`、`update`、`componentUpdated`、`unbind`五个生命周期钩子

1441

Vue2基础指令

/

m0_63758722的博客 1598

【Vue2】常见Vue指令=>速学版

一些常见Vue指令学习

m0_74662483的博客 2091

vue2指令

在Vue 2中,自定义组件也可以使用v-model指令来实现双向绑定。默认情况下,v-model在组件上会利用名为value的 prop 和名为input的事件,但你可以通过设置组件的model选项来修改这些默认的 prop 和事件名。以下是如何在自定义组件中使用v-model在组件内声明一个 prop通常,这个 prop 被命名为value,这样它可以与v-model的默认行为相匹配。在组件内触发一个事件当需要通知父组件更新数据时,你应该在组件内部触发一个名为input。

Cheny_Yang的博客 2080

【vue2基础教程】vue指令

Vue.js 是一款流行的 JavaScript 框架,广泛应用于构建交互性强、响应速度快的现代 Web 应用程序。Vue 指令是 Vue.js 中的一项重要特性,它们允许开发者将特定的行为应用到 HTML 元素上,从而使得 DOM 操作更加便捷和灵活。在本篇文章中,我们将介绍 Vue 指令的基础知识,帮助读者快速入门 Vue.js 开发。本文介绍了 Vue.js 中的指令,它们是 Vue.js 框架中的重要特性之一。

m0_62599305的博客 1847
上一篇: vue2之混入(mixin)
下一篇: Markdown快速上手(typora)
mez_Blog
mez_Blog 新星创作者: 前端开发技术领域 新星创作者: 前端开发技术领域
博客等级 码龄9年 1万+粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

mez_Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值