全局API

  • (1)什么是全局API?
    全局API并不在构造器里,而是先声明全局变量或者直接在Vue上定义一些新功能,Vue内置了一些全局API。
    通俗理解:就是在构造器外部Vue提供的API函数定义新的功能
  • (2)常用vue 的全局 API列表
    1、Vue.directive 自定义指令
    2、Vue.extend 扩展实例构造器
    3、全局操作Vue.set + Vue.delete
    4、Vue 的生命周期
    5、Vue component 组件 + Vue template模板
    6、Vue.nextTick线程操作、Vue.filter筛选、Vue.use调用

小结:全局API就是在构造器外部用Vue提供的API函数来定义新的功能。

Vue.set全局操作

  • (3)全局操作API-set简介:
    Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法。比如在vue构造器内部定义了一个count为1的数据,我们在构造器外部定义了一个方法,要每次点击按钮给值加1.就需要用到Vue.set。
  • 一、引用构造器外部数据
    什么是外部数据,就是不在Vue构造器里里的data处声明,而是在构造器外部声明,然后在data处引用的数据。
    外部数据的加入让程序更加灵活,我们可以在外部获取任何想要的数据形式,然后让data引用。 如下所示
  • 二、改变外部数据的三种方法
    1、用Vue.set改变
    2、用Vue对象的方法添加
    3、直接操作外部数据
  • 如下所示,在mounted挂载完毕后年纪+1,如下所示

    以上图中3种方法均可改变外部数据
  • 其实这三种方式都可以操作外部的数据,Vue也给我们增加了一种操作外部数据的方法。
    具体代码如下:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div class="demo">
			<h2>{{money}}</h2>
		</div>
	</body>
	<script type="text/javascript">
		/* 在构造器外部声明数据 */
		var moneyValue = {
			money:2000
		}
		/* 构造器 */
		var demo = new Vue({
			el: '.demo',
			/* 引用外部数据 */
			data:moneyValue,
			/* 挂载完毕 */
			mounted(){
				/* 三种方式 */
				/*1. this.money ++ */
				/*2. set语法Vue.set(对象名,'键名',键新值) 
				Vue.set(moneyValue,'money',2001)*/
				3.moneyValue.money++
			}
		})
	</script>
</html>
  • 三、为什么要有Vue.set的存在?
  • 由于Javascript的限制,Vue不能自动检测以下变动的数组。
    当你利用索引直接设置一个项时,vue不会自动更新。
    当你修改数组的长度时,vue不会自动更新。
  • 小结:普通的情况下对Vue实例里面的数据进行更改,数据改掉了,但是呈现在页面的视图并没有发生变化,所以借用set方法视图也会跟着刷新
    案例:普通方式视图并没有刷新
  • 案例:set方式视图会刷新
  • 语法:Vue.set(target,key,value)
  • 小结:
    1、语法:Vue.set( target, key, value )
    2、返回值:设置的值
    3、作用:向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。
    4、通俗理解:用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性
    5、注意对象不能是 Vue 实例,或者 Vue 实例的根数据对象
    具体代码如下:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div class="demo">
			<h2>{{list}}</h2>
		</div>
	</body>
	<script type="text/javascript">
		/* 构造器 */
		var demo = new Vue({
			el: '.demo',
			data:{
				list:['龙珠','西游记','冒险岛','水浒传']
			}
		})
		console.log(demo.list)
		/* 由于Javascript的限制,Vue不能自动检测以下变动的数组。
		当你利用索引直接设置一个项时,vue不会自动更新。
		当你修改数组的长度时,vue不会自动更新。 */
		//demo.list[3] = '海贼王'
		/* set方式视图会刷新语法:Vue.set(target,key,value) */
		Vue.set(demo.list,3,"蜡笔小新")
	</script>
</html>
  • (4)Vue.delete删除对象元素操作
  • 语法:Vue.delete(target,key)用法和原理与set添加元素是一样的道理

    上图:删除对象的属性。如果对象是响应式的,确保删除能触发更新视图。这个方法主要用于避开 Vue 不能检测到属性被删除的限制,但是很少会使用它。
    具体代码如下:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../js/vue-2.6.9.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div class="demo">
			<h2>{{list}}</h2>
		</div>
	</body>
	<script type="text/javascript">
		/* 构造器 */
		var demo = new Vue({
			el: '.demo',
			data:{
				list:['龙珠','西游记','冒险岛','水浒传']
			}
		})
		console.log(demo.list)
		/* vue变空,视图不变  */
		//demo.list[3] = ' '
		/* set方式视图会刷新语法:Vue.set(target,key,value) */
		Vue.delete(demo.list,2)
	</script>
</html>