vue开发之路之初入vue

vue的介绍

Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件 。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时 ,Vue.js 也能完美地驱动复杂的单页应用。

什么是MVVM?

  • [mvvm ] Model-View-ViewModel,mvvm 是一种设计思想,Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑;View 代表 UI 组件,它负责将数据模型转化成 UI 展现出来,ViewModel 是一个同步 View 和 Model 的对象。
  • 在 MVVM 架构下,View 和 Model 之间并没有直接的联系,而是通过 ViewModel 进行交互,Model 和 ViewModel 之间的交互是双向的, 因此 View 数据的变化会同步到 Model 中,而 Model 数据的变化也会立即反应到 View 上。
  • ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而 View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作 DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

vue 的安装

  1. node安装
    node 安装地址:http://nodejs.cn/download/
    版本查看方法 node-v

  2. cnpm 国内网络环境下可能会比较慢 推荐使用
    npm install cnpm -g --registry=https://registry.npm.taobao.org
    版本查看方法 cnpm -v

  3. vue-cli 全局安装
    命令行执行 : npm install -g vue-cli
    cnpm install -g vue-cli
    版本查看:vue -V

  4. 初始化项目
    执行命令: vue init webpack demo(你新建的项目名称/文件名称)
    执行之后将会 自动初始化一个文件夹 :demo

  5. 执行项目
    在这里插入图片描述
    当初始化项目完成之后会有如上提示
    cd demo 进入到demo文件夹下
    npm install 环境配置
    npm run dev 项目运行
    在这里插入图片描述
    输入对应的网址就可以启动了

vue的文件结构

  • build 文件夹: 里面是对 webpack 开发和打包的相关设置,包括入口文件、输出文件、使用的模块等;
  • config 文件夹: 主要是指定开发和打包中的静态资源路径、要压缩的文件类型、开发使用的端口号、开发使用虚拟服务器跨域请求 api 等。
  • node_modules: 项目的依赖库;
  • src 文件夹: 我们主要操作的文件夹,组件的增加修改等都在这个文件夹里操作;

assets: 放置静态资源,包括公共的 css 文件、 js 文件、iconfont 字体文件、img 图片文件 以及其他资源类文件。之所以强调是公共的 css 文件,是因为要在组件的 css 标签里加入 ‘scoped‘ 标记,将其作用范围限制在此组件以及调用它的父级组件中,避免污染全局样式;

components: 放置通用模块组件。项目里总会有一些复用的组件,例如弹出框、发送手机验证码、图片上传等,将它们作为通用组件,避免重复工作;

http: 放置与后台 api 相关的文件。这里面有 axios 库的实例配置文件、使用配置的 axios 实例接入 api 获取数据的函数的集合的文件

mixins: 放置混合选项的文件。具体来说,相当于是公用函数的集合,在组件中引用时,可以作用于组件而不必书写重复的方法;

pages: 放置主要页面的组件。例如登录页、用户信息页等。通常是这里的组件本身写入一些结构,再引入通用模块组件,形成完整的页面;

router: 放置路由设置文件,指定路由对应的组件;

store: 放置 vuex 需要的状态关联文件,设置公共的 state、mutations 等;

App.vue: 入口组件,pages 里的组件会被插入此组件中,此组件再插入 index.html 文件里,形成单页面应用;

main.js: 入口 js 文件,影响全局,作用是引入全局使用的库、公共的样式和方法、设置路由等。

  • static 文件夹: 静态资源文件夹,放置不会变动的资源,直接被复制到最终的打包目录(默认是dist/static)下
  • .babelrc: 使用 babel 的配置文件,用来设置转码规则和插件
  • .editorconfig: 代码的规范文件,规定使用空格或 tab 缩进,缩进的长度是两位还是四位之类的代码风格,使用的话需要在编辑器里下载对应的插件;
  • .eslintignore: 指定 eslint 忽略的文件;
  • .eslintrc: 配置 eslint 的检测规则,强制按照规则书写代码;
  • .gitignore: 指定 git 忽略的文件,所有 git 操作均不会对其生效;
  • .postcssrc: 指定使用的 css 预编译器,里面默认配置了 autoprefixer ,自动补全浏览器前缀;
  • favicon.ico: 浏览器标签页 title 旁边的小图标,这是需要我们自己粘贴过来的;
  • index.html: 首页文件,项目运行的时候,会自动将我们在 src 文件夹里生成的组件插入这个文件里;
  • LICENSE: 项目声明的 license;
  • package-lock.json: 当 node_modules 或 package.json 发生变化时自动生成的文件。这个文件主要功能是确定当前安装的包的依赖,以便后续重新安装的时候生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新;
  • package.json: 指定项目开发和生成环境中需要使用的依赖库;
  • README.md: 相当于是一个备注文件,对项目开发过程中需要注意的地方进行一些说明。

vue的生命周期

  • beforeCreate(创建前),在数据观测和初始化事件还未开始
  • created(创建后),完成数据观测,属性和方法的运算,初始化事件, $el 属性还没有显示出来
  • beforeMount(载入前),在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。
  • mounted(载入后),在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。
  • beforeUpdate(更新前),在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
  • updated(更新后),在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
  • beforeDestroy(销毁前),在实例销毁之前调用。实例仍然完全可用。
  • destroyed(销毁后),在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

vue的优点

  1. 渐进式框架:可以根据不同的需求选择不同的层级
  2. 轻量高效:虚拟DOM、压缩之后20KB左右大小
  3. 组件化:提高开发效率、方便重复使用、提高整个项目的维护性
  4. 丰富的工具链:(cli, 单文件组件,webpack loader , hot reload, Chrome devtools 插件)
  5. 完整的 SPA 解决方案 (vue + vue-router + vuex)
  6. 低耦合。视图(View)可以独立于 Model 变化和修改,一个 ViewModel 可以绑定到不同的"View"上,当 View 变化的时候 Model 可以不变,当 Model 变化的时候 View 也可以不变。

vue的通信方式

  • props:props适合类型A父传子的传递类型;也是最常见的传递方式;
  • $ emit/$ on :此方法适合ABCDEF所有传递类型,父传子、子传父、跨组件传递等
  • $ attrs/$ listeners :此方法常用于C路径传递方式,也就是祖传子,$ attrs传递属性,$ listeners传递事件;因为props传递只能之上而下一层一层传递,并不能跃级传递,$ attrs/$ listeners可以作为中间层将上层组件信息,传递给任何子组件;
  • provide/inject:provide/inject是从祖先组件想后代组件传递,不论层次多深,但官方不推荐使用,这样会破坏vue 数据流原则;使用方法很简单,祖组件定义provide数据,后代组件inject接收;
  • vuex:vuex是vue生态里面的状态管理器,可要储存获取项目任何数据.

vuex

所谓的Vuex其实就是一个为Vue.js设计的数据仓库,就是把各个组件公用的数据放到一个仓库里面进行统一的管理,这样既使得非父子组件间的数据共享变得简单明了,也让程序变得更加可维护(将数据抽离了出来),而且只要仓库里面的数据发生了变化,在其他组件里面数据被引用的地方也会自动更新。
在这里插入图片描述
由上图,我们可以看出Vuex有以下几个部分构成

  • state:state是存储的单一状态,是存储的基本数据。
  • Getters:getters是store的计算属性,对state的加工,是派生出来的数据。就像computed计算属性一样,getter返回的值会根据它的依赖被缓存起来,且只有当它的依赖值发生改变才会被重新计算。
  • Mutations:mutations提交更改数据,使用store.commit方法更改state存储的状态。(mutations同步函数)
  • Actions:actions像一个装饰器,提交mutation,而不是直接变更状态。(actions可以包含任何异步操作
  • Module:Module是store分割的模块,每个模块拥有自己的state、getters、mutations、actions。
  • 辅助函数:Vuex提供了mapState、MapGetters、MapActions、mapMutations等辅助函数给开发在vm中处理store。
  • 结:Vuex是通过全局注入store对象,来实现组件间的状态共享。在大型复杂的项目中(多级组件嵌套),需要实现一个组件更改某个数据,多个组件自动获取更改后的数据进行业务逻辑处理,这时候使用vuex比较合适。假如只是多个组件间传递数据,使用vuex未免有点大材小用,其实只用使用组件间常用的通信方法即可。
发布了5 篇原创文章 · 获赞 14 · 访问量 413

猜你喜欢

转载自blog.csdn.net/qhyk519/article/details/105298679