vue学习与实战
文章目录
学习前提
前端技术组成:
- 1.逻辑
- 判断
- 循环
- 2.事件
- 浏览器事件:Windows document
- Dom事件:增,删,改,查,修改结点元素内容
- (事件也可以用框架来做)jQury
- Vue
- React
- 3.视图
- html
- css(前端最难的就是界面,)
- (视图可以使用框架来做)layui,bootstrap(可视化布局)
- 4.通信(总结起来就是一个ajax)
- xhr(jQuery)
- ajax
- axios(vue里面的)
前端化工程:SSM+Vue+bootstrap
第一章 前端核心分析
1.1概述
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,方便与第三方库或既有项目整合。
- 只关注视图层
- 包括哪些?HTML,CSS,JS(给用户看,刷新数据)
- 网络通信:axios
- 页面跳转:vue-router
- 状态管理:vuex
- Vue-UI:ICE
1.2 复习前端准备知识
-
前端三要素
-
结构层(HTML)
-
表现层(CSS)
-
什么是CSS预处理器?
CSS预处理器定义了一种新的语言.其基本思想是,用一种专门的编程语言,为css增加一种编程特性,通俗来说"就是用一种专门的编程语言,进行web页面设计,再通过编译器转换为正常的CSS文件,以供项目使用"
常见的CSS预处理器有哪些?
- SASS:基于Ruby
- LESS:基于NodeJS
Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。
Less 可以运行在 Node 或浏览器端。
-
行为层(JavaScript)
JavaScript一门弱类型脚本语言,其源代码在发往客户端运行之前不需要进行编译,而是将文本格式的字符串代码发送到浏览器由浏览器解释运行
native原生JS开发
原生JS开发,也就是
让我们按照(ECMAScript)European Computer Manufacturers Association
标准的开发方式,简称是ES,特点是所有浏览器都支持
这里面我们提到一个ES标准降级工具webpack
TypeScript微软的标准
是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程
-
JavaScript的一些框架
- jQuery:大家熟知的JavaScript框架,优点是简化了DOM操作,缺点是DOM操作太频繁,影响前端性能;在前端眼里使用它仅仅是为了兼容IE6、7、8;
- Angular: Google收购的前端框架,由一群Java程序员升发,其特点是将后台的MVC模式搬 到了前端并增加了模块化开发的理念,与微软合作,采用 Type Script语法开发;对后台程序员友 好,对前端程序员不太友好;最大的缺点是版本迭代不合理(如:1代->2代除了名字,基本就 是两个东西:截止发表博客时已推出了 Angular6
- React: Facebook 出品,一款高性能的JS前端框架;特点是提出了新概念【虚拟DOM】用于减少真实DOM操作,在内存中模拟DOM操作,有效的提升了前端渲染效率;缺点是使用复
杂,因为需要额外学习一门【JSX】语言: - Vue:一款渐进式 Java Script框架,所谓渐进式就是逐步实现新特性的意思,如实现模块化开 发、路由、状态管理等新特性。其特点是综合了 Angular(模块化)和 React(虚拟DOM)的 优点
- Axios: 前端通信框架;因为Vue的边界很明确,就是为了处理DOM,所以并不具备通信能 力,此时就需要额外使用一个通信框架与服务器交互;当然也可以直接选择使用 jQuery提供的 AJAX通信功能
-
前端UI框架
-
Ant- Design:阿里巴巴出品,基于 React的U框架
-
ElementUl、iview、ice:饿了么出品,基于Vue的UI框架
-
Bootstrap: Twitter推出的一个用于前端开发的开源工具包
-
AmazeUl:又叫“妹子UI,一款HTML5跨屏前端框架
- JavaScript构建工具
-
Babel:JS编译工具,主要用于浏览器不支持的ES新特性,比如用于编译
-
TypeScript·WebPack:模块打包器,主要作用是打包、压缩、合并及按序加载
以上知识点已将WebApp开发所需技能全部梳理完毕
1.3 三端统一
- 混合开发(Hybrid App)
主要目的是实现一套代码三端统一(PC、 Android:apk、ios:ipa)并能够调用到设备底层硬 件(如:传感器、GPS、摄像头等),打包方式主要有以下两种
-
云打包: HBuild- HBuildX, DCloud出品; API Cloud
-
本地打包: Cordova(前身是 PhoneGap)
- 微信小程序
1.4 后端技术
前端人员为了方便开发也需要掌握一定的后端技术,但我们Java后台人员知道后台知识体系极其 NoJS
NodeS的作者已经声称放弃(说是架构做的不好再加上笨重的 node modules,可能
既然是后台技术,那肯定也需要框架和项目管理工具,Node框架及项目管理工具如下
-
koa: Express简化版
-
YARN:NPM的替代方案,类似于 Maven和 Gradle的关系
-
Express: NodeJS框架
-
NPM:项目综合管理工具,类似于 Maven
1.5 主流前端框架
1.5.1 Vue.js
1.5.2 iView
iview是一个强大的基于Vue的Ul库,有很多实用的基础组件比 elementui的组件更丰富,主要服务于PC界面的中后台产品。使用单文件的Vue组件化开发模式基于npm+ webpack+ babel开发,支持ES2015高质量、功能丰富友好的APl,自由灵活地使用空间。
- 官网地址
- Github
- iView-admin
备注:属于前端主流框架,选型时可考虑使用,主要特点是移动端支持较多
1.5.3 ElementUI
Element是饿了么前端开源维护的ueU组件库,组件齐全,基本涵盖后台所需的所有组件文档讲解详细,例子也很丰富。主要用于开发PC端的页面,是一个质量比较高的VueU组件库.
- 官网地址
- Github
- vue-element-admin
备注:属于前端主流框架,选型时可考虑使用,主要特点是桌面端支持较多
1.5.4 ICE
270多个来自几乎所有BU的项目在使。飞冰包含了一条从设计端到开发端的完整链路,帮助用户快 搭建属于自己的中后台应用。飞冰是阿里巴巴团队基于 React/Angular/vue的中后台应用解决方案,在阿里巴巴内部,已经有
备注:主要组件还是以React为主,目前对Vue的支持还不太完善
1.6 前后端分离端
为什么会有前后端分离?
第二章 初学Vue
2.1 第一个Vue程序
- 导入vue.js
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
- 定义一个Vue对象
<!-- 1.0导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: "#app",
data :{
//model:数据
message: "hello vue!"
}
});
</script>
- 绑定一个元素
<!--view 层变成了一个模板-->
<div id="app">
{{message}}
</div>
总体流程
- 导入Vue
- new Vue()
- 放data(model)数据
- 从模板里面取数据
2.2 Vue基本语法
<script>
var vm = new Vue({
el: "#app",
data :{
//model:数据
message: "hello vue!"
}
});
</script>
引入Vue.js之后,会声明一个Vue对象.使用new的方式,可以返回一个对象,这个对象被我们称为应用对象或者是Vue,js的对象,在new Vue的时候需要传入一个对象作为参数这个对象有两个特别重要的属性
- el: element选择元素
- data:将视图中声明的变量,在data里面注册
2.3 V-bind
除了文本插值,我们还可以像这样来绑定元素 attribute:
<div id="app-2">
<span v-bind:title="message">
鼠标悬停几秒钟查看此处动态绑定的提示信息!
</span>
</div>
<script>
var app2 = new Vue({
el: '#app-2',
data: {
message: '页面加载于 ' + new Date().toLocaleString()
}
})
</script>
你看到的 v-bind
attribute 被称为指令。指令带有前缀 v-
,以表示它们是 Vue 提供的特殊 attribute。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的 title
attribute 和 Vue 实例的 message
property 保持一致”。
如果你再次打开浏览器的 JavaScript 控制台,输入 app2.message = '新消息'
,就会再一次看到这个绑定了 title
attribute 的 HTML 已经进行了更新。
2.4 v-if
<!--view 层变成了一个模板-->
<div id="app">
<p v-if="seen">正确</p>
<p v-else>错误</p>
</span>
</div>
<!-- 1.0导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data :{
//model:数据
seen: false
}
});
</script>
for循环来new一个数组
<!--view 层变成了一个模板-->
<div id="app">
<ol>
<li v-for="item in items">
{{item.message}}
</li>
</ol>
</div>
<!-- 1.0导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data :{
//model:数据
items:[
{message:'A'},
{message:'B'}
]
}
});
</script>
在控制台里,输入 vm.items.push({message:'C'})
,你会发现列表最后添加了一个新项目。
2.5 787原则
学习vue我们必须之到它的7个属性,8个 方法,以及7个指令。787原则
el属性
- 用来指示vue编译器从什么地方开始解析 vue的语法,可以说是一个占位符。
data属性
- 用来组织从view中抽象出来的属性,可以说将视图的数据抽象出来存放在data中。
template属性
- 用来设置模板,会替换页面元素,包括占位符。
methods属性
- 放置页面中的业务逻辑,js方法一般都放置在methods中
render属性
- 创建真正的Virtual Dom
computed属性
- 用来计算
watch属性
- watch:function(new,old){} 监听data中数据的变化 两个参数,一个返回新值,一个返回旧值,
2.6 Vue绑定事件
官网的事件只有一个 on
可以用
v-on
指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。
事件肯定有方法
因为然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在 v-on
指令中是不可行的。因此 v-on
还可以接收一个需要调用的方法名称。
<script>
var vm = new Vue({
el: '#app',
data :{
message: "这是我的vue程序"
},
methods:{
sayhi:function () {
alert(this.message);
}
}
});
</script>
还有一个监听事件
可以用 v-on
指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。
示例:
<!--view 层变成了一个模板-->
<div id="app">
<button v-on:click="counter +=1">点击加一</button>
<p>显示你点击按钮的次数{{counter}}</p>
</div>
<!-- 1.0导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data :{
counter: 0
}
});
</script>
一通百通
第三章 Vue表单双绑,组件
3.1 Vue双向绑定
什么是双向数据绑定?
Vuejs是一个MVVM框架
,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。这也算是Vuej精髓之的处了
值得注意的是,我们所说的数据双向绑定。一定是对于U控件来说的,非U控件不会涉及到数据双向绑定,单向数据绑定是使用状态管理工具的前提。如果我们使用vuex
的,那么数据流也是单项的,这时就会和双向数据绑定有冲突
为什么要实现数据的双向绑定?
在Vue.js
中,如果使用vuex
,实际上数据还是单向的,之所以说是数据双向绑定,这是用的UI控件来说,对于我们处理表单,Vue.js
的双向数据绑定用起来就特别舒服了。即两者并不互斥,在全局性数据流使用单项,方便跟踪;局部性数据流使用双向,简单易操作。
在表单中使用双向数据绑定?
你可以用v-mode指令在表单、及<select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但v-mode
本质上不过是语 法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
注意:v-model
会忽略所有表单元素的value、checked、selected
特性的初始值而总是将Vue 实例的数据作为数据来源。你应该通过JavaScript在组件的data 选项中声明初始值!