2024年从零写一个类似Vue的Mvvm框架 01,我把所有前端第三方库整理成了PDF

最后

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

给大家分享一些关于HTML的面试题。


Mvvm.prototype={

_init:function (options) {

var vm = this;

//给mvvm设定一个id

vm._uid = uid$1++;

vm._isMvvm = true;

vm.$options = options;

vm._self = vm;

//初始化生命周期

vm.initLifecycle();

//初始化事件

vm.initEvents();

//执行beforeCreate钩子

callHook(vm,‘beforeCreate’);

//数据代理、数据劫持、处理data、methods等

vm.initState();

//执行created钩子

callHook(vm,‘created’);

//编译

new Compile(vm);

//执行mounted钩子

callHook(vm,‘mounted’);//编译完成后的钩子

}

进入到 vm.initState()的initState函数里面,看它做的事情:

initState:function(){

var vm = this;

var opts = vm.$options;

//data的处理

opts.data = vm.initData(opts.data);

//将data代理到vm下

vm.initProxy();

//数据劫持

vm.initInjections();

//处理props

if(opts.props){vm.initProps(opts.props)};

//处理methods

if(opts.methods){vm.initMethods(opts.methods)};

//处理计算属性computed

if(opts.computed){vm.initComputed(opts.computed)};

//处理filters(过滤器,暂不支持)

if(opts.filters){vm.initFilters(opts.filters)};

}

1.数据代理、数据劫持 主要用到了Object.defineProperty 也不多说了,要注意的3个地方如图:

2.处理计算属性computed

initComputed:function(computed){

//处理计算属性

var me=this;

var computedKeys=[];

var cObj;

_.eachObj(computed,function(key,value){

cObj = value ;

var getter = .isFunction(cObj)? cObj : (.isObject(cObj)?cObj.get:function(){});

var setter = .isFunction(cObj)? function(){} : (.isObject(cObj)?cObj.set:function(){});

Object.defineProperty(me, key, {

enumerable: true,

configurable: true,

get:getter,

set:setter

});

me[key]= getter.bind(me);

computedKeys.push(key);

})

me.$computedKeys = computedKeys;

}

3.处理methods,就是把方法代理到mvvm实例对象中。

找到  new Compile(vm) 进入编译,这里需要关注的两个事情:

1.将el对应dom元素的子节点全部插入到文档碎片当中,到编译完成、数据处理完成后在重新添加回来。

2.处理文档碎片(编译及数据处理等)

编译的过程就是循环每一个节点,处理节点里面的我们需要处理的属性,比如m-text文本属性、m-html,m-on:click事件属性等

当匹配到对应的属性就去compileUtil对象中寻找到处理逻辑,将从data里面获取到数据更新到对应的节点上,并且添加观察者

当全部编译完成,就会重新设置回页面当中,至此整个页面编译完成(下面这段模板可以看到编译前后的对比):

{{first}}-{{second}}

{{second}}

computed:

ha:

test

未编译前是这个样子的:

编译完成后

成功的将data、computed 包含方法都映射到页面上了,测试一下,在文本框输入内容看什么效果:

因为文本框绑定的是data的first,可以通过文本修改来修改数据,同时再次更新到页面上,页面上多次绑定了first的都自动更新了,这就是我们想要的双向绑定。

最后

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

更新了,这就是我们想要的双向绑定。

最后

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-ace8saC8-1714976300437)]

[外链图片转存中…(img-97vkwybz-1714976300437)]

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我会尽力帮助您!首先,Vue.js一个流行的前端框架,它使开发者能够快速地构建交互式用户界面。在您开始编写代码之前,您需要预先安装一些必要的软件工具。具体来说,您需要安装 Node.js 和 npm。这两个工具可以在 https://nodejs.org/en/ 下载和安装。 您可以使用 Vue.js CLI 来创建新的项目。以下是创建一个新项目的步骤: 1. 打开命令行终端并进入要创建项目的目录。 2. 运行命令 `npm install -g @vue/cli` 来全局安装 Vue CLI。 3. 运行命令 `vue create [project-name]` 来创建新项目。在项目名称位置替换 [project-name]。 4. 选择您想使用的一些插件和特性。 5. 运行命令 `cd [project-name]` 来进入新项目目录。 6. 运行命令 `npm run serve` 来启动开发服务器。 这些步骤将创建一个全新的 Vue.js 项目,并且您可以通过访问 http://localhost:8080/ 在浏览器中查看它。 在项目中,您需要创建一些组件来构建用户界面。以下是创建 Vue 组件的步骤: 1. 在 `src/components` 文件夹中创建一个 `HelloWorld.vue` 文件。 2. 打开 `HelloWorld.vue` 文件并添加以下代码: ``` <template> <div> <h1>{{ message }}</h1> </div> </template> <script> export default { name: 'HelloWorld', data() { return { message: 'Hello, World!' }; } }; </script> ``` 3. 在您的 Vue.js 应用程序中使用 `HelloWorld` 组件。在 `src/App.vue` 文件中添加以下代码: ``` <template> <div id="app"> <HelloWorld /> </div> </template> <script> import HelloWorld from './components/HelloWorld.vue'; export default { name: 'App', components: { HelloWorld } }; </script> ``` 以上就是简单的前端vue框架的构建过程,当然实际开发中还有很多复杂的场景和技术需要学习和掌握。希望对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值