天天看點

[前端開發]Vue元件化的思想

元件化的思想

将一個頁面中的處理邏輯放在一起,處理起來就會很複雜,不利于後續管理和擴充。

如果将頁面拆分成一個個小的功能塊,每個功能塊實作自己的内容,之後對頁面的管理和維護就變得很容易了。

[前端開發]Vue元件化的思想

注冊元件的基本步驟

1.建立元件構造器

2.注冊元件

3.使用元件

[前端開發]Vue元件化的思想
//建立元件構造器對象
const cpnC = Vue.extend({
      template:`
        <div>
          <h2>hello world</h2>
          <p>hi world</p>
        </div>
      `
})

//注冊元件
Vue.component('my-cpn',cpnC)
    
//使用元件
<div id="app">
    <my-cpn></my-cpn>
</div>
           

全局元件

可以在多個Vue的執行個體下使用

Vue.component('my-cpn',cpnC)

局部元件

僅可以在目前Vue執行個體下使用

var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      components:{
        mycpn: cpnC
      }
    });
           

父子元件

<script>
    const cpnC1 = Vue.extend({
      template:`
        <div>
          <h2>我是标題</h2>
          <p>我是内容,哈哈</p>
          </div>
      `
    })

    const cpnC2 = Vue.extend({
      template:`
        <div>
          <h2>我是标題2</h2>
          <p>我是内容2,呵呵呵</p>
          <cpn1></cpn1>
        </div>
      `,
      components:{
        cpn1:cpnC1
      }
    })
    
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      components:{
        cpn2: cpnC2
      }
    });
  </script>
           
元件與元件之間存在層級關系

注冊全局元件 文法糖

Vue.component('cpn1',{
      template:`
        <div>
          <h2>我是标題</h2>
          <p>我是内容,呵呵呵</p>
        </div>
      `
    })
           

注冊局部元件 文法糖

var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      components:{
        'cpn2' :{
          template:`
          <div>
           <h2>我是标題2</h2>
           <p>我是内容2,呵呵呵</p>
         </div>
         `
        }
      }
    });
           
省去了調用extend的步驟

元件模闆抽離

1.通過script标簽,

type="text/x-template"

<script type="text/x-template" id="cpn">
  <div>
    <h2>哈哈哈哈哈</h2>
    <p>歪比歪比</p>
  </div>
</script>

<script>
    Vue.component('cpn',{
      template: '#cpn'
    })
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {}
    });
</script>
           
1.通過template标簽
<template id='cpn'>
  <div>
    <h2>哈哈哈哈哈</h2>
    <p>歪比歪比</p>
  </div>
</template>

<script>
    Vue.component('cpn',{
      template: '#cpn'
    })
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {}
    });
</script>
           

元件可以通路Vue執行個體的資料嗎?

不能,而且即使可以通路,如果将所有資料都放在Vue執行個體中,Vue執行個體會變得非常臃腫

Vue元件應該有自己儲存資料的地方
<template id='cpn'>
  <div>
    <h2>{{title}}</h2>
    <p>歪比歪比</p>
  </div>
</template>
  <script>
    Vue.component('cpn',{
      template: '#cpn',
      data(){
        return {
          title: 'abc'
        }
      }
    })
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {}
    });
  </script>
           

data(){}

為什麼元件中data必須是函數

元件是一個封閉的空間,每一個元件執行個體都有自己的狀态