vue.js简介 - b13wen/vue.js-study GitHub Wiki
安装 vue.js不支持IE8及其以下版本,
独立版本 直接下载并用 标签引入,Vue会被注册为一个全局变量。重要提示:在开发是请用开发版本你,遇到常见错误它会给出友好的警告 用最小压缩版会失去错误提示和警告。
CDN 推荐:unpkg, 会保持和npm发布的最新版本一致。可以在unpkg.com/vue/ 浏览npm包资源 也可以从jsdlivr 或cdnjs获取,不过这连个服务版本更新可能滞后 NPM 在用Vue.js构建大型应用时推荐使用npm安装,npm能很好地和诸如Webpack或Browserify模块打包器配合使用。vue.js 也提供配 套工具来开发单文件组件
npm install vue
独立构建 VS 运行时构建 有两中构建方式,独立构建和运行构建。他们的区别在于前者包含模板编辑器而后者不包含。 模板编辑器用于编译Vue模板字符串成纯javaScript函数。如果你想用template选项,需要编译 模板编辑器的职责是将模板字符串编译为纯javaScript的渲染函数。如果你想要在组件中使用template选项,你就需要编辑器
独立构建包含模板编辑器并支持template选项,它也依赖于浏览器的接口的存在,所以你不能使用它来为服务器端渲染
运行时构建不包含模板编辑器,因此不支持template选项,只能用render选项,但即使使用运行时构建,在单文件组件中也依然可以写模板
因为单文件的模板会在构建时预编译为reder函数。运行时构建比独立构建要轻量30% 只有16.39 kb min+gzip大小。
默认NPM包导出的事运行时构建。为了使用独立构建,在webpack配置中添加下面的别名
resolve: {
alias: {
'vue$': 'vue/dist/vue.js'
}
}
命令行工具
Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用。该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程。只需一分钟即可启动带热重载、保存时静态检查以及可用于生产环境的构建配置的项目:
# 全局安装 vue-cli$ npm install --global vue-cli
# 创建一个基于 webpack 模板的新项目
$ vue init webpack my-project
# 安装依赖,走你
$ cd my-project
$ npm install
$ npm run dev
1、vuejs概述与快速入门 2、vuejs 常用系统指令 3、vuejs生命周期 4、vuejs ajax 5、综合案例
1、vuejs概述与快速入门 1)VueJS介绍 Vue.js 是一个构建数据驱动的web界面的渐进式框架。Vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合 和组合的视图组件。它不仅易于上手,还便于与第三方库或既有项目整合。 Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
2)MVVM模式
MVVM是Model-View-ViewModel的简写,本质是MVC的改进版。MVVM就是将其中的View 的状态和行为抽象化,让我们将视图UI
和业务逻辑分开。
主要的目的是分离视图(view)和模型(Model)
Vue.js 是一个提供了MVVM风格的双向绑定的javascript库,专注于View层。它的核心是VM , view model 负责连接view 和model
保证视图和数据的一致性,这种轻量级的框架让前端开发更加高效、便捷。
ViewModel : (DOM Listeners, Data Bindings) DOM元素监听 和 数据绑定
3)快速入门
1)引入
<scropt src="XXX"></scropt>
2)声明式渲染
<div id="app">
{{message}}
</div>
<scropt>
var app = new Vue({
el: '#app', //表示当前vue接管了div区域
data: {
message: 'Hello world!' //不要以分号结尾
}
})
</scropt>
3)工作解析:现将数据和DOM绑定,所有数据都是响应式的,可以在控制台修改,能够看到相应的更新
4)插值表达式
数据绑定最常见的形式就是使用Mustache语法(双大括号)的文本插值,双大括号标签将会被替代为对应数据对象上属性的值。
当数据对象属性改变,插值出的内容都会更新。
1){{}} 可以包含表达式
例:
{{ok? 'YES':'NO'}}
2)不可以包含复杂表达式和语句,包含了表达式也不会生效
{{var a=1}} {{if(ok) {return message}}}
2、vuejs 常用系统指令 1)v-on 用v-on监听DOM事件,并在触发时运行一些javaScript代码
a)v-on:click="fun1('good')" 点击
b)v-on:keydown="fun1('good')" 键盘监听事件 按下键盘
c)v-on:mouseover 鼠标覆盖
简写方式
@click="XXX"
d)事件修饰符:修饰符可以串联
.stop 使用:v-on:click.stop="" 阻止点击事件
.prevent 事件不再重载页面
.capture 添加事件侦听器是使用捕获模式
.self 只有该元素本身才能触发
.once 事件只会触发触发一次
e) 键值修饰符 v-on:keydown.enter("fun1()") 组合件 )v-on:keydown.alt.
.enter
.tab
.delete (捕获 “删除” 和 “退格” 键)
.esc
.space
.up
.down
.left
.right
2)v-text与v-html
v-text用于渲染普通文本,不能解析html代码
v-html可以解析html代码
3)v-bind可以用来绑定标签中的属性,从而能够修改
例:v-bind:href="url"
或
v-bind:href={"www.baidu." +i} 可以拼接字符串
简写方式
:href="url"
4)v-model 双向绑定 一般用于表单属性
<input type="text" v-model="userName" />
相当于
<div id='app'>
<!-- v-model 等价于下面这段HTML -->
<input type="text" v-model="userName" />
<!-- v-model做的事情. -->
<input type="text" :value="userName" @input="hanlderInputClick" />
</div>
5)v-for
例:
v-for="(item,key,index) in list" key可以作为当前项键名1.2.3.4.5 index作为索引
{{index}}.{{key}}.{{item}}
:key="index" 保证了DOM的唯一性
6)v-if 与 v-show
v-if 根据表达式的值决定是否渲染元素
v-show 根据表达式的值切换display css属性
3、vuejs生命周期 beforeCreate 创建vue实例前 created 创建vue实例后 beforeMount 挂载到dom前 mounted 挂载到dao后 beforeUpdate 数据变化更新前 updated 数据变化更新后 beforeDstory vue实例销毁前 destoryed vue实例销毁后
4、vuejs ajax 1)vue-resource vue-resource 是Vue.js的插件提供了使用XMLHttpRequest或JSONp进行web请求和处理响应的服务,当vue到2.0后 不在更行推荐使用axios 2) axios Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中 1)node.js Node.js 是运行在服务端的 JavaScript,用于渲染,简单来说就是对js的封装增加了对请求的发送和响应
2)promise
是什么
1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列
为什么?
1、node.js 的高异步性
2、传统的多次异步要函数层层嵌套,不好维护
3、没有return 的能力使用时需要回调函数
怎么做:
1、promise是一个对象,函数的区别在于可以保存状态
2、没有剥夺return,无需层层回调
3、代码简介
特性及实现原理
1、三种状态:pending(进行中)、fulfiled(已成功)、rejected(已失败)
2、promise对象接受一个回调函数作为参数,该回调函数接受两个参数,回调成功resolve 回调失败reject
resolve 除了是正常值外还可能是一个promise对象的实例,reject通常是一个error对象的实例
3、then方法返回一个新的promise实例,,并接收两个参数onResolved(fulfilled状态的回调);
onRejected(rejected状态的回调,该参数可选)
4、代码解析
1)实例1:new Promise(
function (resolve, reject) {
// 一段耗时的异步操作
resolve('成功') // 数据处理完成
// reject('失败') // 数据处理出错
}
).then(
(res) => {console.log(res)}, // 成功
(err) => {console.log(err)} // 失败
)
resolve作用是将 promise对象的状态从“pending”变成“resolved”
在异步操作成功是调用,并将异步操作结果,作为参数传递出去
reject作用是,将promise对象的状态从“pending”变为“rejected”
2)实例2:使用then形成一个队列从上至下,从里到外执行
new Promise(resolve => {
setTimeout(() => {
resolve('hello')
}, 2000)
}).then(val => {
console.log(val) // 参数val = 'hello'
return new Promise(resolve => {
setTimeout(() => {
resolve('world')
}, 2000)
})
}).then(val => {
console.log(val) // 参数val = 'world'
})
https://github.com/axios/axios
1、axios介绍
基于Promise的http客户端,用于浏览器和node.js
2、特征
支持promise Api
拦截请求和响应
转换请求和响应数据
取消请求
JSON数据的自动转换
客户端防止XSRF(模仿用户的行为进行跨站请求伪造的。)
3、安装
利用npm安装
npm install axios
利用bower
bower install axios
利用yarn
yarn add axios
script引入
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
4、发送请求和接受响应
1、get请求
axios.get('/user/12345',{params:{ID:12345}})
.then(function (response) {
console.log(response.data);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
})
.catch({(err)=>{
console.log(err)
});
2、post请求
axios.post('/user',{
firstName: 'Fred',
lastName: 'Flintstone'
})
.then((res)=>{
console.log(res);
})
.catch((err)=>{
console.log(err);
});
5、=>函数的说明
(x)=> x+6;
相当于:
function(x){
return x + 6;
}
5、综合案例