1.1 Vue 介绍
1.1.1 官网
-
1.1.2 介绍与描述
Vue是—套用来动态构建用户界面的渐进式JavaScript框架
- 构建用户界面: 把数据通过某种办法变成用户界面
- 渐进式: Vue可以自底向上逐层的应用,简单应用只需要一个轻量小巧的核心库,复杂应用可以引入各式各样的Vue插件
1.1.3 Vue 的特点
- 遵循MVM模式
- 编码简洁,体积小,运行效率高,适合移动/PC端开发
- 它本身只关注 UI,可以引入其它第三方库开发项目
- 采用组件化模式,提高代码复用率、且让代码更好维护
- 声明式编码,让编码人员无需直接操作DOM,提高开发效率。
- 命令式编程码一个命令一个操作,声明式编码是一组操作的集合
- 使用虚拟 DOM 和 Diff 算法,尽量复用DOM节点
如果数据发生改变,原生的 JS 就会将原来原有的一样的数据进行重新覆盖,就如下图,赵六是后面加上去的,但是另外三个人的数据也会重新再生成一次,这样影响并浪费性能。
Vue 会有个虚拟 DOM,将不变的数据继续保留,只修改变更的数据。
1.1.4 与其他 JS 架构的关系
- 借鉴angular的模板和数据绑定技术
-
1.1.5 Vue 扩展插件
vue-cli: vue脚手架
- vue-resource(axios): ajax 请求
- vue-router:路由
- vuex:状态管理(它是vue的插件但是没有用vue-xxx的命名规则)
- vue-lazyload:图片懒加载
- vue-scroller:页面滑动相关
- mint-ui:基于vue 的U组件库(移动端)
-
1.2 初始 Vue
1.2.1 引入 Vue
从官网下载
vue.js
开发环境,我下载开发版本,我下载的是 2.6.14 版本的。- 将下载下来的
vue.js
放到自己指定的目录
- 在learnVuejs创建一个同级的
vue01
目录,后续初步学习的内容都会在这个里面。
- 用 idea 打开目录
- 创建
html
文件,然后点击右上角的预览,我用的是Edge
浏览器,
这个时候控制台会报两个错误
第一个是提示下载开发工具,按照给的链接下载工具包 [https://github.com/vuejs/vue-devtools](https://github.com/vuejs/vue-devtools)
选择安装扩展插件,也可以到官网找到 Vue Devtools
下载你对应浏览器版本的插件,我用的是 Edge 浏览器,所以直接点击 Install on Edge
,浏览器会提示安装拓展插件
安装好后再看浏览器,之前第一个提示已经消失
第二个提示是我运行的是开发版本的 vue,部署生产的时候要使用生产版本的 vue,因为开发本的体积会比较大。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 引入vue -->
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<script type="text/javascript">
//设置为 false 以阻止 vue 在启动时生成生产提示。
Vue.config.productionTip = false
</script>
</body>
</html>
这样就不是有警告提示了
1.2.2 创建 Vue 对象
- 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象;
- root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法;
- root容器里的代码被称为【Vue模板】;
- Vue实例和容器是一一对应的;
- 真实开发中只有一个Vue实例,并且会配合着组件一起使用;
- {{xxx}}中的xxx要写js表达式,且xxx可以自动读取到data中的所有属性;
- 一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新;
Vue 对象会去解析扫描容器,看容器里是否定义 Vue 对象所包含的语法和属性,如果容器里有 Vue 对象定义的属性,Vue 对象就会将对应的属性值填充到容器里
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>第一个Vue</title> <!-- 引入vue --> <script type="text/javascript" src="../vuejs/vue.js"></script> </head> <body> <!-- 准备一个容器,用户展示 Vue 构建的对象 --> <div id="root"> <h1>Hello, {{name}}</h1> </div> <script type="text/javascript"> //设置为 false 以阻止 vue 在启动时生成生产提示。 Vue.config.productionTip = false //创建Vue实例 new Vue({ el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。 data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。 name:'湖南' } }); </script> </body> </html>
效果如下:
- 借助开发者工具可以直接在页面修改属性值
一个 Vue 不能同时处理两个容器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>第一个Vue</title> <!-- 引入vue --> <script type="text/javascript" src="../vuejs/vue.js"></script> </head> <body> <!-- 准备一个容器,用户展示 Vue 构建的对象 --> <div class="root"> <h1>Hello, {{name}} 1</h1> </div> <div class="root"> <h1>Hello, {{name}} 2</h1> </div> <script type="text/javascript"> //设置为 false 以阻止 vue 在启动时生成生产提示。 Vue.config.productionTip = false //创建Vue实例 new Vue({ el:'.root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。 data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。 name:'湖南' } }); </script> </body> </html>
谁在前面就解析谁,并且一个容器只能被一个 Vue 实例处理,它们是一对一关系。
注意区分:js表达式 和 js代码(语句),{{}}
里必须要写 js 表达式
js 表达式是一种特殊的 js 语句
- 表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方:
a
a+b
demo(1)
x === y ? 'a' : 'b'
- js代码(语句)
if(){}
for(){}