1.组件的使用:Vue.js的组件的使用有3个步骤:创建组件构造器、注册组件和使用组件。
1-1:全局组件
This is my first component!' }) // 2.注册组件,并指定组件的标签,组件的HTML标签为Vue.component('my-component', myComponent) new Vue({ el: '#app' });" _ue_custom_node_="true">
Vue.extend()是Vue构造器的扩展,调用Vue.extend()创建的是一个组件构造器,而不是一个具体的组件实例。
Vue.extend()构造器有一个选项对象,选项对象的template属性用于定义组件要渲染的HTML。
使用Vue.component()注册组件时,需要提供2个参数,第1个参数时组件的标签,第2个参数是组件构造器。
Vue.component()方法内部会调用组件构造器,创建一个组件实例。
组件应该挂载到某个Vue实例下,否则它不会生效。
1-2:局部组件:
let vm = new Vue({ el :"#app", components :{ hello :{ template: 'Parent', } } })
1-3:父子组件:
let vm = new Vue({ el :"#app", components :{ parent :{ template :'Parent', components :{ child :{ template :"Child" //可以无限嵌套组件 } } } } })
2.props(父组件传递给子组件数据):
let vm = new Vue({ el:"#app", components:{ parent:{ template:"{{name}}", data(){ return {name:"张三"} }, components:{ child:{ template:"{{childName}}", props:["childName"] }, } } } })
单向数据流
Prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是反过来不会。这是为了防止子组件无意间修改了父组件的状态,来避免应用的数据流变得难以理解。
另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你不应该在子组件内部改变 prop。如果你这么做了,Vue 会在控制台给出警告。
在两种情况下,我们很容易忍不住想去修改 prop 中数据:1.Prop 作为初始值传入后,子组件想把它当作局部数据来用。可以定义一个局部变量,并用 prop 的值初始化它:
props: ['initialCounter'],data: function () {return { counter: this.initialCounter }}2.Prop 作为原始数据传入,由子组件处理成其它数据输出。定义一个计算属性,处理 prop 的值并返回:
props: ['size'],computed: {normalizedSize: function () {return this.size.trim().toLowerCase()}}
自定义事件
new Vue({ el: '#app', components: { parent: {//------>声明定义一个父组件 template: "{{name}}", //接受到发射的事件并且声明一个方法a data() { return {name: "张三"} }, methods: { a(data) {//在这里定义方法a,参数data就是子组件通过$event发射的数据 this.name = data } }, components: { child: {//----->子组件 template: "{{name}}", //给子组件绑定事件 data() { return {name: "张小三"} }, methods: { fn() {//----->向上发射一个事件标识,把需要传递的数据一起传递到子组件上 this.$emit("event", this.name) } } } } } } })
转载请注明: Vue教程中文网 - 打造国内领先的vue学习网站-vue视频,vue教程,vue学习,vue培训 » vue教程【六】-vue组件二