手把手教你学Vue-2(组件开辟)

1.vue 组件-声明

组件分为全局的和部分的。

  • 全局声明

    • Vue.component(tagName, options) **
    • 援用组件 <tagName></tagName>
    <div id="app">
        <runoob></runoob>
    </div>
     
    <script>
    // 注册
    Vue.component('runoob', {
      template: '<h1>自定义组件!</h1>'
    })
    // 建立根实例
    new Vue({
      el: '#app'
    })
    </script>
  • 我们也能够在实例选项中注册部分组件,如许组件只能在这个实例中运用:
<div id="app">
    <runoob></runoob>
</div>
 
<script>
var Child = {
  template: '<h1>自定义组件!</h1>'
}
 
// 建立根实例
new Vue({
  el: '#app',
  components: {
    // <runoob> 将只在父模板可用
    'runoob': Child
  }
})
</script>

检察线上演示结果
— todo
这里后期依据运用谈一下二者的优点和现实运用

组件的data 必需是一个函数

Vue.component('simple-counter', {
  template: '<button v-on:click="counter += 1">{{ counter }}</button>',
  // 技术上 data 的确是一个函数了,因而 Vue 不会正告,
  // 然则我们却给每一个组件实例返回了同一个对象的援用
  data: function () {
    return{
    counter:0
    }
  }
})

new Vue({
  el: '#example-2'
})

2. 父子组件的传值-props

<div id="app">
    <div>
      <child v-bind:message="parentMsg"></child>
    </div>
</div>
// 注册
Vue.component('child', {
  // 声明 props
  props: ['message'],
  // 一样也能够在 vm 实例中像 "this.message" 如许运用
  template: '<span>{{ message }}</span>'
})
// 建立根实例
new Vue({
  el: '#app',
  data:{
    message:"hello",
  }
})

3. 父子组件的值互相通报

在 Vue 中,父子组件的关联能够总结为 prop 向下通报,事宜向上通报。父组件经由过程 prop 给子组件下发数据,子组件经由过程事宜给父组件发送音讯。

父组件是运用 props 通报数据给子组件,但如果子组件要把数据通报归去,就需要运用自定义事宜!

我们能够运用 v-on 绑定自定义事宜, 每一个 Vue 实例都完成了事宜接口(Events interface),即:

运用 $on(eventName) 监听事宜

运用 $emit(eventName) 触发事宜

别的,父组件能够在运用子组件的处所直接用 v-on 来监听子组件触发的事宜。

以下实例中子组件已和它外部完整解耦了。它所做的只是触发一个父组件体贴的内部事宜。

<div id="app">
    <div id="counter-event-example">
      <p>{{ total }}</p>
      <button-counter v-on:increment="incrementTotal"></button-counter>
      <button-counter v-on:increment="incrementTotal"></button-counter>
    </div>
</div>
 
<script>
Vue.component('button-counter', {
  template: '<button v-on:click="incrementHandler">{{ counter }}</button>',
  data: function () {
    return {
      counter: 0
    }
  },
  methods: {
    incrementHandler: function () {
      this.counter += 1
      this.$emit('increment')
    }
  },
})
new Vue({
  el: '#counter-event-example',
  data: {
    total: 0
  },
  methods: {
    incrementTotal: function () {
      this.total += 1
    }
  }
})
</script>
    原文作者:木子喵
    原文地址: https://segmentfault.com/a/1190000014040242
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞