Vue简介:
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
Vue的安装:
1.官方网站下载:https://cn.vuejs.org/
2.CDN下载:
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
3.NPM下载:
通过命令行窗口进行全局安装:
$ npm install vue
使用
<script type="text/javascript">
let app = new Vue({
el: "#app", //element 挂载节点
data:{
message:'hello world!',
title:"first page"
}
});
console.log(app.message)
</script>
使用:
1. {{ value_name }}
2. v-bind:attr="value_name"
Vue指令
v-bind : 将数据与属性绑定
v-bind用来动态的绑定一个或者多个特性。没有参数时,可以绑定到一个包含键值对的对象。常用于动态绑定class和style。以及href等。
简写为一个冒号【 :】
<div v-bind:class="{ active: isActive }"></div>
v-if : 条件判断 v-else v-else-if 用于控制标签的显示
<h1 v-if="awesome">Vue is awesome!</h1>
v-for : 循环遍历
v-for="value in value_name" {{value}}
v-model :双向绑定 , 视图和数据相互影响
v-on : 事件绑定 处理事件 简便写法 : @ @click
比如 : v-on:click = "function"
v-else:v-else是搭配v-if使用的,它必须紧跟在v-if或者v-else-if后面,否则不起作用。
<a v-if="ok">yes</a>
<a v-else>No</a>
v-else-if
v-else-if充当v-if的else-if块,可以链式的使用多次。可以更加方便的实现switch语句。
<div v-if="type==='A'">
A
</div>
<div v-else-if="type==='B'">
B
</div>
<div v-else-if="type==='C'">
C
</div>
<div v-else>
Not A,B,C
</div>
Vue实例
el: 挂载节点,一般作为vue创实例的第一个参数
<script type="text/javascript">
let app = new Vue({
el:'#app', //挂载的虚拟节点
</script>
app.$el
如果没有el指定节点,需要使用vm.$mount()主动挂载
template: 视图模板
打印数据及给html设置得css样式
<div id="app">
<div v-text="htmlstr"></div>
</div>
<script>
let app = new Vue({
el:"#app",
data:{
htmlstr:`<p style="color:red"> 这是个段落 </p>`,
}
});
</script>
data: vue的数据,实例会将这些属性添加在vue的响应式系统中。
//第一种方法:
let vm=new Vue({
data:{a:1,b:2,},
})
//第二种方法:
let vm=new Vue({
data(){return {a:1,b:2,}},
})
注意:当这些数据改变时,视图会进行重渲染。
值得注意的是只有当实例被创建时就已经存在于 data 中的 property 才是响应式的
实例的$watch可以监听数据值的变化。
app.$watch('message',function(new_value,old_velue){
console.log('变化了')
})
8个生命周期钩子函数
会在vue实例运行在相应阶段自动调用的。
beforeCreate:在实例初始化之后,**数据观测(data observer) ** 和 event/watcher事件配置 之前被调用,注意是 之前,此时data、watcher、methods统统滴没有。
created: 在实例已经创建完成之后被调用。在这一步,实例已完成以下配置:数据观测(data observer) ,属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,el属性目前不可见。此时this.el属性目前不可见。此时this. el属性目前不可见。此时 this.el属性目前不可见。此时this.data 可以访问,watcher、events、methods也出现了,若根据后台接口动态改变data和methods的场景下,可以使用。
beforeMount: 在挂载开始之前被调用,相关的 render 函数 首次被调用。但是render正在执行中,此时DOM还是无法操作的。我打印了此时的vue实例对象,相比于created生命周期,此时只是多了一个$el的属性,然而其值为undefined。
,页面渲染时所需要的数据,应尽量在这之前完成赋值。
mounted: 以及产生虚拟dom,并且以及将页面的el进行了替换
beforeUpdate: 进行虚拟dom更新之前,每一次数据变化都会产生
updated: 更新成功之后的钩子函数
deforeDestory: vm实例摧毁之前
destoryed: vue实例已经被摧毁。
methods: 指定vue实例需要使用的方法。
computed:与data里面的数据是有趣别的,computed是根据data里面的数据变化进行变化的。
模板语法
- 如何使用简单的vue数据
-
进行简单的页面渲染
{{ value_name }}
将变量使用到HTML属性中
属性绑定: v-bind 简写 :
v-bind:src="url"
:src="url"
- 如何在HTML标签中显示HTML代码
v-html: 会将字符串解析成html
v-text: 会将字符串直接按照普通文本输出
-
指令
vue使用v-* 表示指令 ,指令后面需要绑定一个参数。并且只能绑定一个参数。
v-bind:title
v-if=""
修饰符:
prevent: 阻止事件的默认行为
stop: 阻止事件冒泡
-
缩写
v-bind 可以缩写为 :
v-on 可以缩写为 @
计算属性
属性: data里面的数据称之为属性,
方法: methods里面的函数称之为方法。
计算属性: 进过计算获取的属性。computed指定。
监听属性:监听data属性的变化,watch指定,监听的函数有两个参数,第一个是新值,第二个是旧值。
类的绑定与样式的绑定
可以使用对象 常用
也可以使用数组
条件渲染
v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。
<h1 v-if="awesome">Vue is awesome!</h1>
v-else:条件成立的时候不显示 ,配合v-if使用
<div v-if="Math.random() > 0.5">
Now you see me
</div>
<div v-else>
Now you don't
</div>
v-else-if: 条件成立的时候显示,配合v-if使用
注意: 条件渲染内部会根据标签的内容进行最小替换,也就是有可能发生不替换标签只替换属性的可能,如果想要一定替换标签,需要添加key‘的属性。这个属性是唯一值。
不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS property display。
v-if: 操作的是display : block | none;
v-show: 虽然操作的也是display,但是类似于操作的是visibility: visable | hidden;会有一个行间的display:none。
事件修饰符
在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。
- .stop
- .prevent
- .capture
- .self
- .once
- .passive
<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>
axios
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
安装:
使用npm:
$ npm install axios
使用 bower:
$ bower install axios
使用 cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
案列:
执行GET请求
// 为给定 ID 的 user 创建请求
axios.get('/user?ID=12345')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
// 上面的请求也可以这样做
axios.get('/user', {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
执行POST请求
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
执行多个并发请求
function getUserAccount() {
return axios.get('/user/12345');
}
function getUserPermissions() {
return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (acct, perms) {
// 两个请求现在都执行完成
}));