(1)1990年,HTML(超文本标记语言)诞生,主要用来做静态网页,由一些标签+css等组成。
(2)1995年,JSP、PHP、ASP的相继出现,可以使用它们来完成动态网页,但是后台非常臃肿。
(3)Ajax(Asynchronous Javascript And XML,即异步Javascript和XML,也称为局部刷新技术)成为主流。
(4)2008年,HTML5出现了,也标志着前端的春天来了。
(5)2010年,NodeJs出现,它的出现吸引了很多前端开发人员开始用 JavaScript 开发服务器代码,其异步编程风格也深受开发人员的喜爱。Node.js 的伟大不仅在于拓展了 JavaScript 在服务器端的无限可能,更重要的是它构建了一个庞大的生态系统。在这之后,一大批前端框架涌现,其中就包含Vue,Vue的最初发布时间为2014年7月。
我们之前用过的SpringMVC框架基于MVC架构,而MVC的意思是:Model (模型)、 View(视图) 、Controller(控制器)。
前端框架Vue则基于MVVM框架,意思为:Model(模型) 包括数据和一些基本操作 、View (视图) 页面渲染结果 、 ViewModel(视图模型)模型与视图间的双向操作。其中Vue框架最具特色的为可以实现数据的双向绑定,需要v-model指令来实现,只要我们Model发生了改变,View上自然就会表现出来。当用户修改了View,Model中的数据也会跟着改变。
把开发人员从繁琐的DOM操作中解放出来,把关注点放在如何操作Model上。具体流程如图:
NPM是Node提供的模块管理工具,可以非常方便的下载安装很多前端框架,包括Jquery、AngularJS、VueJs都有。为了后面学习方便,我们需要先安装node及NPM工具.
NodeJs下载:https://nodejs.org/en/download/
(1)安装nodejs工具包,安装非常简单,一直下一步即可。安装完毕之后可以在cmd控制台输入以下指令查看及完成相应操作。
node -v 查看node版本信息
npm -v 查看npm的版本信息
npm install npm@latest -g 升级为最新版(需要升级)
(2)在idea工具上,安装nodejs插件,
安装完毕之后,重启即可。
(3)创建一个static web项目
(4)在Terminal控制台输入npm init -y(相当于是创建了一个maven项目)
(5)安装vue,有如下指令:
npm install -g vue 全局安装vue(所有项目都可以使用)
npm install vue 局部安装vue(当前项目使用,推荐)
npm uninstall vue 卸载vue
npm update vue 更新vue
web1.0时代:
最初的网页以HTML为主,是纯静态的网页。网页是只读的,信息流只能从服务的到客户端单向流通。开发人员也只关心页面的样式和内容即可。
web2.0时代:
(1)let与const
let相较于var,它是块级的(相当于局部变量)
for(var j = 0;j < 10;j++){
console.log(j)
}
console.log(j);
for(let i = 0;i<10;i++){
console.log(i);
}
console.log(i);
const声明常量不能修改(相当于final)
(2)解构表达式
数组解构:
//数组解构
var arr = [1,2,3];
var [a1,a2,a3] = arr;
console.log(a1,a2,a3);
对象解构:
//对象解构
var obj = {"name":"小困困","age":25}
var {name,age} = obj;
console.log(name,age);
(3)箭头函数
// 以前:
eat: function (food) {
console.log(this.name + "在吃" + food);
},
// 箭头函数版:
eat2: food => console.log(person.name + "在吃" + food),// 这里拿不到this
// 简写版:
eat3(food){
console.log(this.name + "在吃" + food);
}
箭头函数+解构表达式写法:
//箭头表达式+解构表达式
//以前写法
var person = {
name:"小憨憨"
}
let a = function (person) {
console.log(person.name);
}
a(person);
//箭头表达式+解构表达式写法
var b = ({name}) =>{
console.debug(name);
}
b({"name":"小憨憨"});
(4)Promise对象
Promise是异步编程的一种解决方案,比传统的解决方案(回调函数+事件)更加合理和强大。
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。过Promise的构造函数来创建Promise对象,并在内部封装一个异步执行的结果。
案例:
//(4)promise
const p = new Promise((resolve, reject) =>{
// 这里我们用定时任务模拟异步
setTimeout(() => {
const num = Math.random();
// 随机返回成功或失败
if (num < 0.5) {
resolve("成功!num:" + num)
} else {
reject("出错了!num:" + num)
}
}, 300)
}).then(function (msg) {
console.log(msg);
}).catch(function (msg) {
console.log(msg);
})
(5)模块化
模块化是一种思想,这种思想在前端有多种规范常见的规范有commonJs(nodeJS),cmd/amd(可以在浏览器中使用),es6(可以在浏览器中使用).
模块化就是把代码进行拆分,方便重复利用。类似java中的导包:要使用一个包,必须先导包。而JS中没有包的概念,换来的是模块。es6模块功能主要由两个命令构成:export和import。
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
Vue渐进式的理解:http://www.bslxx.com/a/vue/2017/1205/1490.html
Vue只关注视图层。
Vue通过新的属性(自定义)和{ {表达式}}扩展了 HTML。
Vue的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue学习起来非常简单。
官网:https://cn.vuejs.org/
Vue是一个 JavaScript 框架。它是一个以 JavaScript 编写的库。
Vue是以一个 JavaScript 文件形式发布的,可通过 script 标签添加到网页中:
下载Vue文件到本地,官方提供两个版本:
https://cn.vuejs.org/v2/guide/installation.html
引入vue.js
每个Vue实例通过el配置挂载的标签,该标签可以通过id或者是class挂载。 实例上的属性和方法只能够在当前实例挂载的标签中使用。
{
{ message }}
Vue实例的数据保存在配置属性data中, data自身也是一个对象.
通过Vue实例直接访问和修改data对象中的数据,及时同步的页面上
Vue实例的方法保存在配置属性methods中,methods自身也是一个对象. 该对象中值都是方法体
方法都是被Vue对象调用,所以方法中的this代表Vue对象
每个 Vue 实例在被创建时都要经过一系列的初始化过程 :创建实例,装载模板,渲染模板等等。Vue为生命周期中的每个状态都设置了钩子函数(监听函数)。每当Vue实例处于不同的生命周期时,对应的函数就会被触发调用。
支持算术运算:
{
{5+5}}
{
{5+"v5"}}
{
{5+"5"}}
{
{"5"-"5"}}
{
{5*5}}
{
{"a"-"b"}}
{
{"5"*"5"}}
{
{5/5}}
{
{show?"男":"女"}}
字符串操作:
{
{"一点寒芒先到,随后抢出如龙"}}
{
{"一点寒芒先到,随后抢出如龙".length}}
{
{"一点寒芒先到,随后抢出如龙".substring(2,6)}}
{
{"abcdefg".toUpperCase()}}
对象数组操作:
{
{user}}
{
{JSON.stringify(user)}}
{
{user.name}}
{
{user.age}}
{
{user.fight()}}
{
{hobbys}}
{
{hobbys[0]}}
{
{hobbys.length}}
{
{hobbys.toString()}}
{
{hobbys.join("------")}}
(1)v-text(类似于innerText)
语法:
<标签名 v-text=“表达式”>标签名>
作用:
通过data中的数据更新标签标签中的textContent属性的值.(标签中的文本内容)
注意事项:
(3)v-for 循环
语法:
<标签 v-for=“元素 in 数据源”>标签>
数据源: 数组,
元素: 数组中的一个元素,
数据源: 对象
元素: 对象中的一个属性名
<标签 v-for="(元素,索引|键) in 数据源">标签>
当数据源是数组时, ()的第二个参数值索引
当数据源是对象时, ()的第二个参数值键
<标签 v-for="(元素,键,索引) in 对象">标签>
作用:
基于数据源多次循环达到多次渲染当前元素.
-
{
{text}}
-
{
{v}}
-
{
{index}}===={
{text}}
-
{
{value}}===={
{key}}====={
{index}}
序号
姓名
年龄
性别
{
{tea.id}}
{
{tea.name}}
{
{tea.age}}
{
{tea.sex}}
(4)v-bind 将data中的数据绑定到标签上,作为标签的属性. 比如 :
语法:
为一个标签属性绑定一个值
<标签 v-bind:标签属性名字=“表达式”>标签>
简写形式:
<标签 :标签属性名字=“表达式”>标签>
为一个标签绑定一个对象作为该标签的多个属性
<标签 v-bind=“对象”>标签>
注意事项
将一个对象键和值作为标签的属性的名字和值时, 在v-bind后不需要指定属性的名字
(5)v-model 在表单控件上创建双向绑定
表单的值被修改时, 基于dom监听机制, 就会自动修改data中的数据中,
当data中的数据被修改时,基于数据绑定机制, 自动会把新的内容自动更新到value属性上. 页面视图也发生了改变. 双向绑定
需要注意:
你好世界1
你好世界2
你好世界3
你成绩还有待提高!
你成绩还可以嘛!
你成绩很差
你成绩较差
你差一点就及格了
你及格了,学分到手了