VUE.JS 组件component### 1. 什么是组件
组件是vue最强大的功能之一,组件可以扩展HTML元素、封装可重用的代码
组件是自定义元素(对象)
2. 组件的定义方式
建议在组件名称中加入:“-”
方式一:先创建组件构造器,然后由构造器来创建组件
方式二:直接创建组件
/**
方式一:先创建组件构造器,然后由构造器来创建组件
*/
var myCompoent = Vue.extend({
template:"<h3>hello VUE</h3>"
});
//使用Vue.component(标签名,组件的构造器),根据组件构造器来创建组件
Vue.component("my-hello",myCompoent);
//范式二
Vue.component("v-ps",{
template:"<h2>你好,VUE</h2>"
})
调用:
<v-ps></v-ps>
<my-hello></my-hello>
3. 组件分类
分类:
局部组件和全局组件
4. 模板引用
将组件的代码写到<template></template>中,并且引用。template必须只有一个直接子元素
5.动态组件
使用keep-alive组件,缓存非活动的组件,可以保留组件状态,避免组件重新渲染(默认每次都会销毁非活动的组件并且重新渲染)
二、组件之间的通讯
1. 父子组件
在一个组件内部定义的另外一个组件,称为:父子组件
子组件只能在父组件的内部使用
默认情况下,父子组件数据无法之间访问,每个组件实例的作用域是独立的
2. 组件之间的数据通信
2.1 子组件访问父组件的数据
a)在调用子组件是,绑定想要接收的父组件的数据
<my-world :message="msg" :name="name" ></my-world>
b)在子组件内部使用props选项来声明获取数据(接收父组件的数据)
props:['message','name','user']
props:{}//也可以传递对象,允许配置高级设置,比如:数据的类型判断,数据的校验,设置默认值等。。。
总结:
子组件通过props选项来接收父组件的数据
三种数据形式:data、props、computed
2.2 父组件访问子组件的数据
a)在子组件中使用vm.$emit(事件名,参数1,参数2 ,。。。。)触发一个自定义事件。
this.$emit("e-world",this.age,this.height);//触发一个事件,向父组件传递数据
b) 在父组件中使用自组件的地方监听子组件触发的事件,并且在父组件中定义方法来获取子组件的数据
@e-world:监听子组件的事件
<my-world :message="msg" :name="name" @e-world="getData"></my-world>
3. 单向数据流
父级 prop 的更新会向下流动到子组件中,但是反过来则不行。
不允许直接修改父组件的数据,否则会报错。
解决方式:
1:
如果子组件想把传递过来的值,当做局部变量使用,可以将数据存储到另外一个变量中再操作。不影响父组件
2:
如果子组件想修改数据,并且同步到父组件中,两种方式
a.使用.sync指令(1.0支持,2.0不会,2.3版本以后又支持)
还需要触发一个更新事件 this.$emit('update:name', "唐寅");
b.将父组件中的数据包装成一个对象,传递给子组件,然后在子组件中修改对象属性值(因为对象是引用类型,指向同一个内存地址),推荐!!!