已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录 1 VUE简介2 MVVM模式3 数据驱动和组件式编程4 Vue之HelloWorld 5 生命周期6 从Vue到页面7 Vue组件的重要选项8 Vue常用指令 VUE尤雨溪谈Vue js 我在Google的工作需要在浏览器上进行大量原型设计 于是我想要尽快获得有形的东西 当时有些项目使用了Angular Angular提供了一些用数据绑定和数据驱动来处理DOM的方法 所以你不必自己碰DOM 它也有一些副作用 就是按照它规定的方式来构建代码 对于当时的场景而言实在是太重了 我想 我可以只把我喜欢的部分从Angular中提出来 建立一个非常轻巧的库 不需要那些额外的逻辑 我也很好奇Angular的源码到底是怎么设计的 我最开始只是想着手提取Angular里面很小的功能 如声明式数据绑定 Vue大概就是这么开始的 用过一段时间之后 我感觉我做的东西还有点前途 因为我自己就很喜欢用 于是我花了更多的时间把它封装好 取了一个名字叫做Vue js 2014年2月 我第一次将它作为实际的项目发布在Github上 并把链接发送到了HackerNews上 它就被顶到了首页 然后它在首页待了好几个小时 后来 我写了一篇文章 分享了Vue第一周的使用数据以及我的感受 那是我第一次看见这么多人在Github上为一个项目打星星 我当时一个星期收获了好几百个星星 整个人都激动坏了 原文链接 MVVM模式 MVC模式的意思是 软件可以分成三个部分 各部分之间的通信方式如下 所有通信都是单向的 MVVM模式 MVVM模式采用双向绑定 data binding View的变动 自动反映在ViewModel 反之亦然 Vue Angular和Ember都采用这种模式 相比于Angular Vue js提供了更加简洁 更易于理解的API 使得我们能够快速地上手并使用Vue js 数据驱动和组件式编程 数据驱动 程序 数据结构 算法 这是每个程序都耳熟能详的一句话 可在前端这里并不纯粹 因为前端需要跟界面打交道 html css并没用被抽象成某种在js中使用的数据结构 充当的更多是界面的一种配置 jquery程序员看待他的方式就一块块的ui 用到的时候再 一下 获取之后修改 整个程序写下来是零零散散的节点操作 一个比较实际的情况就是 在ui控件有联动的时候 如果没有一种机制来管理这些ui之间的修改 那么依赖程序员自己去手动管理这些ui的状态 会让人烦不胜烦 且容易出现bug 总结一下基于操作dom的前端开发方式 拼界面 找到dom节点 修改属性 检测是否有其他影响的节点 根据刚刚修改的dom节点更新自己的状态那么上面的那句话就变成了 前端程序 拼界面 操作ui 算法vue或者angular这些mvvm框架给了前端另一种思路 完全基于数据驱动的编程 如果你之前已经习惯了用jQuery操作DOM 学习Vue js时请先抛开手动操作DOM的思维 因为Vue js是数据驱动的 你无需手动操作DOM Vue采用一种数据绑定的方式 自动绑定dom节点的属性 这样就把你从操作dom节点的繁琐过程中解脱出来了 你只要专注于数据的状态 ui更新的事情你不需要去管了 不管是样式还是内容 可见性还是切换class 框架帮你把关注点从传统的dom操作转移到了数据 回归编程的本质 程序 数据结构 算法 这也是mvvm框架最大的思路上的突破 组件式编程 这个理念不是来源于vue 把web组件式开发发扬光大的应该是react了 组件开发是一种朴素的开发思想 分而治之 大型系统拆分成一个个的小模块小组件 分配给不同的人 额外的好处是顺便能复用这个组件 理解组件的思想可以类比函数 一个函数包含哪些东西呢 1 形参2 局部变量3 函数名4 返回值那对应到vue中又是什么呢 Vue之HelloWorld Vue之HelloWorld 使用Vue的过程就是定义MVVM各个组成部分的过程的过程 1 定义View2 定义Model3 创建一个Vue实例或 ViewModel 它用于连接View和Model在创建Vue实例时 需要传入一个选项对象 选项对象可以包含数据 挂载元素 方法 模生命周期钩子等等 在这个示例中 选项对象的el属性指向View el app 表示该Vue实例将挂载到 这个元素 data属性指向Model data exampleData表示我们的Model是exampleData对象 Vue js有多种数据绑定的语法 最基础的形式是文本插值 使用一对大括号语法 在运行时 message 会被数据对象的message属性替换 所以页面上会输出 HelloWorld 生命周期 生命周期 每个Vue实例在被创建之前都要经过一系列的初始化过程 例如 实例需要配置数据观测 dataobserver 编译模版 挂载实例到DOM 然后在数据变化时更新DOM 在这个过程中 实例也会调用一些生命周期钩子 这就给我们提供了执行自定义逻辑的机会 它可以总共分为8个阶段 1 beforeCreate 在实例初始化之后 数据观测 dataobserver 和event watcher事件配置之前被调用 2 created 实例已经创建完成之后被调用 在这一步 实例已完成以下的配置 数据观测 dataobserver 属性和方法的运算 watch event事件回调 然而 挂载阶段还没开始 el属性目前不可见 3 beforeMount 在挂载开始之前被调用 相关的render函数首次被调用 该钩子在服务器端渲染期间不被调用 4 mounted el被新创建的vm el替换 并挂载到实例上去之后调用该钩子 如果root实例挂载了一个文档内元素 当mounted被调用时vm el也在文档内 该钩子在服务器端渲染期间不被调用 5 beforeUpdate 数据更新时调用 发生在虚拟DOM重新渲染和打补丁之前 你可以在这个钩子中进一步地更改状态 这不会触发附加的重渲染过程 该钩子在服务器端渲染期间不被调用 6 updated 由于数据更改导致的虚拟DOM重新渲染和打补丁 在这之后会调用该钩子 当这个钩子被调用时 组件DOM已经更新 所以你现在可以执行依赖于DOM的操作 然而在大多数情况下 你应该避免在此期间更改状态 如果要相应状态改变 通常最好使用计算属性或watcher取而代之 该钩子在服务器端渲染期间不被调用 7 beforeDestroy 实例销毁之前调用 在这一步 实例仍然完全可用 该钩子在服务器端渲染期间不被调用 8 destroyed Vue实例销毁后调用 调用后 Vue实例指示的所有东西都会解绑定 所有的事件监听器会被移除 所有的子实例也会被销毁 该钩子在服务器端渲染期间不被调用 从Vue到页面 从Vue到页面 Vue组件的重要选项 data Vue组件的重要选项 props methods watch computed Vue组件的使用 组件 注册一个全局组件语法格式如下 Vponent tagName options 例子如下 注册 Vponent runoob template 自定义组件 创建根实例 newVue el app 使用VueX解决组件之间的通信 如果你在使用vue js 那么我想你可能会对vue组件之间的通信感到崩溃 一个页面有很多表单 我试图将表单写成一个单文件组件 但是表单 子组件 里的数据和页面 父组件 按钮交互的时候 它们之间的通讯很麻烦 之所以麻烦 是因为父组件可以通过props给子组件传递参数 但子组件内却不能直接修改父组件传过来的参数 这时候 使用vuex就可以比较方便的解决这种问题了 点击importdialogfrom components dialog vue exportdefault data return show false components t dialog dialog exportdefault props show computed currentShow get returnthis show set val this emit update show val 之所以这么麻烦 是因为父组件可以通过props给子组件传递参数 但子组件内却不能直接修改父组件传过来的参数 这时候 使用vuex就可以比较方便的解决这种问题了 点击importdialogfrom components dialog vue exportdefault components t dialog dialog exportdefault Vuex是一个专为Vue js应用程序开发的状态管理模式 它采用集中式存储管理应用的所有组件的状态 并以相应的规则保证状态以一种可预测的方式发生变化 安装 使用vuex npminstallvuex save然后 在main js中加入 importvuexfrom vuex Vue use vuex varstore newvuex Store store对象state show false 再然后 在实例化Vue对象时加入store对象 newVue el app router store 使用storetemplate components App 完成到这一步 上述例子中的 store state show就可以使用了 modules 这里 store state show无论哪个组件都可以使用 那组件多了之后 状态也多了 这么多状态都堆在store文件夹下的index js不好维护怎么办 我们可以使用vuex的modules 把store文件夹下的index js改成 importVuefrom vue importvuexfrom vuex Vue use vuex importdialog storefrom components dialog store js 引入某个store对象exportdefaultnewvuex Store modules dialog dialog store 这里我们引用了一个dialog store js 在这个js文件里我们就可以单独写dialog组件的状态了 exportdefault state show false 做出这样的修改之后 我们将之前我们使用的 store state show统统改为 store state dialog show即可 如果还有其他的组件需要使用vuex 就新建一个对应的状态文件 然后将他们加入store文件夹下的index js文件中的modules中 modules dialog dialog store other other 其他组件 mutations 我们对vuex的依赖仅仅只有一个 store state dialog show一个状态 但是如果我们要进行一个操作 需要依赖很多很多个状态 那管理起来又麻烦了 mutations登场 问题迎刃而解 exportdefault state stateshow false mutations switch dialog state 这里的state对应着上面这个statestate show state show false true 你还可以在这里执行其他的操作改变state 使用 mit switch dialog 来触发mutations中的switch dialog方法 注意 mutations中的方法是不分组件的 假如你在dialog stroe js文件中的定义了switch dialog方法 在其他文件中的一个switch dialog方法 那么 mit switch dialog 会执行所有的switch dialog方法 mutations里的操作必须是同步的 你一定好奇 如果在mutations里执行异步操作会发生什么事情 实际上并不会发生什么奇怪的事情 只是官方推荐 不要在mutationss里执行异步操作而已 actions 多个state的操作 使用mutations会来触发会比较好维护 那么需要执行多个mutations就需要用action了 exportdefault state stateshow false mutations switch dialog state 这里的state对应着上面这个statestate show state show false true 你还可以在这里执行其他的操作改变state actions switch dialog context 这里的context和我们使用的 store拥有相同的对象和方法mit switch dialog 你还可以在这里触发其他的mutations方法 那么 在之前的父组件中 我们需要做修改 来触发action里的switch dialog方法 使用 store dispatch switch dialog 来触发action中的switch dialog方法 官方推荐 将异步操作放在action中 getters getters和vue中的computed类似 都是用来计算state然后生成新的数据 状态 的 还是前面的例子 假如我们需要一个与状态show刚好相反的状态 并且我们需要写很多很多个not show 使用getters就可以解决这种问题 exportdefault state show false getters not show state 这里的state对应着上面这个statereturn state show mutations switch dialog state 这里的state对应着上面这个statestate show state show false true 你还可以在这里执行其他的操作改变state actions switch dialog context 这里的context和我们使用的 store拥有相同的对象和方法mit switch dialog 你还可以在这里触发其他的mutations方法 我们在组件中使用 store state dialog show来获得状态show 类似的 我们可以使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年房地产行业反垄断宽恕制度适用考核试卷
- 2025年农业科技行业生物农药技术应用与智慧农业发展研究报告及未来发展趋势预测
- 2025年能源行业可再生能源利用现状研究报告及未来发展趋势预测
- 2025云南东骏药业集团招聘笔试考试备考试题及答案解析
- 2025中国人民大学高瓴人工智能学院招聘2人考试笔试参考题库附答案解析
- 2025黑龙江北大荒集团建三江医院定向招聘8人笔试考试备考题库及答案解析
- 2026中煤科工集团杭州研究院有限公司全球校园招聘笔试考试备考试题及答案解析
- 2025重庆涪陵区街道办事处选聘笔试考试参考试题及答案解析
- 2026广东省选聘珠海市干部队伍储备人才20人考试笔试参考题库附答案解析
- 2026中建西部建设新材料科技有限公司校园招聘笔试考试备考试题及答案解析
- 村干部日常管理办法
- 香皂监督管理办法
- ALD工艺温度对性能影响-洞察及研究
- 小儿高热惊厥的护理
- 德瑞斯D600变频器说明书
- 入团考试试题及答案大全
- 骨科危重患者的急救及护理
- 公司财务制度及管理制度
- 四川省成都市某中学2024-2025学年八年级上学期期中考试物理试题(原卷版)
- T/CMAM W-6-2022维吾尔医常见病诊疗指南皮肤科
- 工程款退费协议书
评论
0/150
提交评论