vue组件

组件

1 组件定义

VUE是组件化开发,整个项目由各种组件组成

什么是组件?
    每个Page就是一个组件(注册组件、登录组件、商品列表组件)
    页面的组成部分(轮播图、选项卡、下拉菜单...)
    
一个组件就是一个Vue实例
根实例(new Vue()) 其实根实例就是根组件

组件的组成:
    data
    methods
    computed
    watch
    template 模板
    钩子函数
    ...

2 组件基础

注册组件
Vue.component(组件名,{
    data:function(){
        return{
            //Vue 变量
        }
    },
    methods{
        //方法
    },
    template:'html',
    ...
})
组件的使用
<my-button> </my-button>
使用组件的时候 会创建vue实例
类似于 html 自定义元素
每个组件都有独立的作用域
<my-button> </my-button>
<my-button> </my-button>
这两个实例的作用域是独立的
组件的模板
1.模板字符串
2.内联模板 inline-template  不推荐使用
3.x-template
4.单文件组件(最优)
5.render 渲染函数 代替 template

注意
模板内 必须有个根元素
全局组件和局部组件
Vue.component(组件,  {})  全局组件  在哪都可用

//Vue实例中
{	
	 template:'自己里面的局部, 只能在这用'
	 //局部
      components: {
          '组件名': {}'组件名': {}'组件名': {}
          
      }
}
组件之间的互相通信

通过Prop向子组件传递数据

Vue.component('child', {
  // 声明 props
  props: ['message'],
  // 就像 data 一样,prop 也可以在模板中使用
  // 同样也可以在 vm 实例中通过 this.message 来使用
  template: '<span>{{ message }}</span>'
})

通过事件向父级组件发送消息

Vue.component('button-counter', {
  template: '<button v-on:click="incrementCounter">{{ counter }}</button>',
  data: function () {
    return {
      counter: 0
    }
  },
  methods: {
    incrementCounter: function () {
      this.counter += 1
      this.$emit('increment')
    }
  },
})

new Vue({
  el: '#counter-event-example',
  data: {
    total: 0
  },
  methods: {
    incrementTotal: function () {
      this.total += 1
      console.log('第'+this.total+'次点击')
    }
  }
})
posted @ 2018-08-23 17:05  luck_L  阅读(120)  评论(0编辑  收藏  举报