Vue1

第一章

Vue概述

what? Vue是实现UI层的渐进式js框架,核心库关注视图层,简单的ui构建,复杂的路由控制、网络通信...

      Vue.js(读音 /vjuː/,类似于view)是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供驱动,是轻量级的 MVVM 框架

从最简单的数据处理,到数据交互,到DOM操作,到路由处理等,VueJS都有完整的解决方案

why?  ① Vue借鉴了Angular指令和React组件的优势开发出来的

      ② Vue渐进式的框架,学习曲线比较缓和,官方提供了全套的技术支持

      ③ Vue 效率比较高,代码组织非常轻松

      ④ 单文件(以 .vue 结尾),其中包含了一个组件所需要用到的html/css/js

      ⑤ Vue是个人开发者开发的框架,比公司开发的框架发布版本、解决问题的速度更快

      ⑥ 支持jsx、js、ES6、typescript,支持的语法比较多

      ⑦ vue2.0引入了Virtual DOM(虚拟DOM),页面更新效率更高,速度更快

where? 可以做 ui 视图层、实现SPA、也可以加入路由、网络、状态管理等,有非常多的官方工具

       IE9及更高版本才支持

问题: Vue和jQuery之间的区别?

Vue是声明式,是通过描述状态与视图之间的映射关系,然后通过这样的一个映射关系来操作DOM,或者说是用这样的映射关系来生成一个DOM节点插入到页面中去

jQuery是命令式,使用jQuery操作DOM去局部更新视图,做到局部渲染,命令式就是想做什么就直接去调用方法直接做,简单直接

在逻辑上,Vue只有一个行为: 就是状态,而jQuery是两个行为: 状态+DOM,Vue可以让开发者把关注点只放在状态的维护上,不需要关系操作DOM,降低了代码维护的复杂度

https://cn.vuejs.org                         //官方教程

https://github.com/vuejs/vue-cli             //用CLI搭建vue脚手架

https://github.com/vuejs/vue-devtools        //vue调试工具

  下载仓库→npm install下载依赖→npm run build编译→Chrome→更多工具→扩展程序

  →将shells/chrome文件夹拖过去,在F12(开发者工具)中看到Vue即可(chrome文件夹不能删)

https://router.vuejs.org/zh-cn               //路由手册

https://github.com/pagekit/vue-resource      //vue-resource文档

https://github.com/vuejs/awesome-vue         //Vue的其它库

how?

搭建Vue开发环境

方式1  借助于vue-cli(Vue的脚手架工具,30kB的gzipped)

npm install webpack -g              //全局安装webpack

npm install --global vue-cli        //全局安装 vue-cli

vue -V          //查询安装的vue的版本

vue list        //显示可用的模板

vue init webpack(模板名)  myapp(项目名)        //创建一个基于 webpack 模板的完整项目

初始化设置:

Target directory exists. Continue? (Y/n)直接回车默认会下载 vue2.0模板(可能需要连代理)

Project name (vue-test)    直接回车默认

Project description (A Vue.js project)    直接回车默认

Use ESLint to lint your code      是否使用ESLink检查代码(可选N)

Author  写上自己的名字

cd 项目名           //切换到项目

npm install         //安装项目依赖(自动安装package.json中指定的文件到node_modules文件夹中)

npm run dev         //运行,调试模式(已自动设置热更新,在src中开发会自动更新)

npm run build       //发布,发布模式(编译、打包)

在手机上查看vue.js项目:

① 修改config/index.js文件

   module.exports = {

     dev: {

       host: '0.0.0.0'    //原为: host: 'localhost'

     }

   }

② 查看本机ip(在命令行输入ipconfig)

③ 将项目url中的localhost修改为此ip即可在手机端查看此项目(手机和电脑需要在同一局域网下)

import Vue from 'vue'

import VueRouter from 'vue-router'

import VueResource from 'vue-resource'    //这三个都要在单文件的main.js中引入注册才能使用

主目录:

index.html      首页,可自由修改(可设置视口、引入zepto、md5、echarts等,发布时会被单独分开)

package.json    可修改name、版本、描述、作者,项目配置文件,指定项目的依赖

README.md       描述文件,可修改

config          配置,启动相关,里面的index.js可修改

node_modules    项目依赖的包

static          放置静态资源的文件夹(图片、js、css文件等)

build/webpack.base.conf.js    基础配置文件,配置别名alias('@':resolve('src'),将@解析为src)

dist            发布的文件目录,即webpack编译输出的目录

src文件夹       主要在此开发(开发目录)

  main.js       入口文件,初始化vue实例并设置需要使用的插件(比如less、css,发布时不会被分开)

                  比如: require('./assets/css/adapter.less');  会被合成压缩为一个文件

  App.vue       主组件,所有页面都是在App.vue下进行切换的,可以将所有的路由看作它的子组件

  router        配置路由组件

 components  功能组件,用来与用户交互

mockServer    模拟后端服务,即用webpack开发时模拟调用的后端服务(用nodejs服务模拟)

libs          放置公共的文件,如js、css、img、font等

通常一个前端项目会分有一个 src 目录和 dist 目录,src放置源码,dist放置编译后的代码

static存放第三方静态文件

src/main.js:全局配置

Vue.config.devtools=true;    //是否允许vue-devtools检查代码,方便调试

                             //开发版本默认为true,生产版本默认为false

Vue.config.productionTip=false;        //是否需要vue启动时生成生产提示

build/webpack.prod.conf.js: 或config/index.js:

将 productionSourceMap: true, 改为false,不输出.map文件

npm install less less-loader --save     //安装less及其依赖项

方式2  直接引入 vue.js 文件到项目工程中

________________________________________________________________________________________________

一、vue编译打包后,css的引用路径错误:

1、在webpack.prod.conf.js文件里的output里面添加: publicPath: './'

2、在utils.js文件里添加:

  return ExtractTextPlugin.extract({

    use: loaders,

    fallback: 'vue-style-loader',

    publicPath: '../../',

  })

3、在config/index.js文件里,添加: assetsPublicPath: './'

二、使用Object.freeze()可以冻结一个对象,冻结后不能向对象添加新的属性,不能修改已有属性的值,Vue遇到这类对象时,不会为对象加上getter、setter等数据劫持的方法,可以节省浏览器CPU开销,比较适合展示类的场景

三、v-else指令必须紧跟在v-if或者v-else-if元素的后面,否则它将不会被识别,当v-if与v-for一起使用时,v-for具有比v-if更高的优先级

所以当循环的集合是为空时,v-if后面的v-else不会被识别

解决: 可以将一个