vue必会API盘点

一、数据相关API

Vue.set

向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。
使用方法: Vue.set(target, propertyName/index, value)

Vue.delete

删除对象的属性。如果对象是响应式的,确保删除能触发更新视图。
使用方法: Vue.delete(target, propertyName/index)

二、事件相关API

vm.$on

监听当前实例上的自定义事件。事件可以由 vm.$emit 触发。回调函数会接收所有传入事件触发函数的额外参数。

vm.$on('test', function (msg) {
console.log(msg)
})

vm.$emit

触发当前实例上的事件。附加参数都会传给监听器回调。

vm.$emit('test', 'hi')

典型应用:事件总线

通过在Vue原型上添加一个Vue实例作为事件总线,实现组件间通信,而不受组件间关系的影响

Vue.prototype.$bus = new Vue();

这样做可以在任意组件中使用this.$bus访问到该Vue实例
没有引入vuex之前非常好的一个解决方案

范例:批量关闭多个消息弹窗

/* 重构样式:提取出.success,并添加.warning */
<style>
.message-box {
	padding: 10px 20px;
}
.success {
	background: #4fc08d;
	border: 1px solid #42b983;
}

.warning {
	background: #f66;
	border: 1px solid #d63200;
}
</style>
<!-- 给之前新增成功消息添加.success -->
<message :show.sync="isShow" class="success">
	<template v-slot:title="slotProps">
  		<strong>{{slotProps.title}}</strong>
	</template>

	<template> 新增成功! </template>
</message>
<!--新增警告提示窗-->
<message :show.sync="showWarn" class="warning">
	<template>
	    <strong>警告</strong>
	</template>
	<template> 请输入课程的名称 </template>
</message>
const app = new Vue({
  el: "#app",
  data() {
    return {
      isShow: false,
      showWarn: false,
    };
  },
  methods: {
    addFood(show) {
      if (this.food) {
        this.foodList.push({name:this.food});
        this.food = "";
        //显示成功弹窗
        this.isShow = show;
      } else {
          //显示错误信息
          this.showWarn = show;
      }
    },

  },

});

下面实现功能:

<script>
//弹窗组件
Vue.component("message", {
	props: ["show"], //使用props弹窗是否展示是由父组件决定的
	template: `
	        <div class="message-box" v-if="show">
	            <!--具名插槽-->
	            <slot name="title"  title="来自message的标题">默认标题</slot>
	
	            <!--通过slot获取父组件传入的内容-->
	            <slot></slot>
	
	            <span class="message-box-colse"  @click="$emit('update:show',false)">X</span>
	        </div>
	    `,
	mounted(){
	    //挂载之后,使用总线 $bus 去监听,监听者不是它自己,而是总线,
	    //总线会派发 message-close
	    //而如果我收到一个  message-close , 就执行一个方法,派发一下,让老爹去修改这个属性
		
		//监听关闭事件
	    this.$bus.$on('message-close',() => {
	        this.$emit('update:show',false);//复制template中关闭按钮的事件
	    })
	}
});
</script>

三、组件或元素引用

ref 和 vm.$refs

ref被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的$refs对象上。如果在普通的DOM元素上使用,引用指向的就是DOM元素;如果用在子组件上,引用就指向组件实例。

范例:设置输入框焦点

<input :value="value"  ...  ref="inp"/>
 
<script>
mounted () {
  //获取焦点事件
  this.$refs.inp.focus();
}
</script>

需要注意的:

  • ref 是作为渲染结果被创建的,在初始渲染时不能访问它们,至少要在mounted钩子后使用。

  • $refs 不是响应式的,不要试图用它在模板中做数据绑定

  • 当 v-for 用于元素或组件时,$refs的引用信息将是包含 DOM 节点或组件实例的数组

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值