2020-11-22 Vue-10组件化开发(1)

博客围绕Vue展开,提及全局与局部内容,强调data需为函数形式且有作用域,还涉及父到子传递、Vue小驼峰等知识,最后进行回顾,整体总结了Vue的一些关键要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

51

 

 

52

  <div id="app">
    <my-cpn></my-cpn>
  </div>

  <script src="../js/vue.js"></script>
  <script>

    const cpnConstructor = Vue.extend({
      template: `
      <div id="app">
        <h2>龙门客栈</h2>
        <p>大闹天宫</p>
        <p>七十二变</p>
      </div>`
    })

    Vue.component('my-cpn', cpnConstructor);

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
        
      }
    })
  </script>

 

 

53

  <div id="app">
    <cpn></cpn>
  </div>
  <div id="app1">
    <cpn></cpn>
  </div>

  <script src="../js/vue.js"></script>
  <script>

    const cpnConstructor = Vue.extend({
      template: `
      <div id="app">
        <h2>龙门客栈</h2>
        <p>大闹天宫</p>
        <p>七十二变</p>
      </div>`
    })

    Vue.component('cpn', cpnConstructor);

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
      }
    });

    const app1 = new Vue({
      el: '#app1'
    })
  </script>

 

 

 

  <div id="app">
    <cpn></cpn>
  </div>
  <div id="app1">
    <cpn></cpn>
  </div>

  <script src="../js/vue.js"></script>
  <script>

    const cpnConstructor = Vue.extend({
      template: `
      <div id="app">
        <h2>龙门客栈</h2>
        <p>大闹天宫</p>
        <p>七十二变</p>
      </div>`
    })

    // Vue.component('cpn', cpnConstructor);

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
      },
      components: {
        cpn: cpnConstructor
      }
    });

    const app1 = new Vue({
      el: '#app1'
    })
  </script>

 

 

 

54

  <div id="app">
    <!-- <cpn1></cpn1> -->
    <cpn2></cpn2>
  </div>

  <script src="../js/vue.js"></script>
  <script>

// const cpn = Vue.extend({})
    const cpnConstructor1 = Vue.extend({
      template: `
      <div id="app">
        <h2>龙门客栈</h2>
        <p>大闹天宫</p>
        <p>七十二变</p>
      </div>
      `
    })
    const cpnConstructor2 = Vue.extend({
      template: `
      <div id="app">
        <h2>大鱼海棠</h2>
        <cpn1></cpn1>
      </div>
      `,
      components: {
        cpn1: cpnConstructor1
      }
    })

    // Vue.component('cpn', cpnConstructor);

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
      },
      components: {
        // cpn1: cpnConstructor1,
        cpn2: cpnConstructor2
      }
    });
  </script>

 

 

 

55

全局

  <div id="app">
    <cpn1></cpn1>
  </div>

  <script src="../js/vue.js"></script>
  <script>

    // const cpnConstructor1 = Vue.extend({
    //   template: `
    //   <div id="app">
    //     <h2>龙门客栈</h2>
    //   </div>
    //   `
    // })

    Vue.component('cpn1',{
      template: `
      <div id="app">
        <h2>龙门客栈</h2>
      </div>
      `
    });

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
      },
      // components: {
      //   cpn1: cpnConstructor1
      // }
    });
  </script>

局部

  <div id="app">
    <cpn1></cpn1>
  </div>

  <script src="../js/vue.js"></script>
  <script>

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
      },
      components: {
        'cpn1': {
          template: `
            <div>
              <h2>大鱼海棠</h2>
            </div>
          `
        }
      }
    })
  </script>

 

 

 

56

  <div id="app">
    <cpn1></cpn1>
  </div>

  <script type="text/x-template" id="cpn">
  <div>
    <h2>失落沙洲</h2>
  </div>
  </script>

  <script src="../js/vue.js"></script>
  <script>

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
      },
      components: {
        'cpn1': {
          template: '#cpn'
        }
      }
    })
  </script>

  <template id="cpn">
    <div>
      <h2>失落沙洲</h2>
    </div>
  </template>

这样更简便

 

 

 

57

 

  <div id="app">
    <cpn1></cpn1>
  </div>

  <template id="cpn">
    <div>
      <h2>{{title}}</h2>
    </div>
  </template>

  <script src="../js/vue.js"></script>
  <script>

    Vue.component('cpn1', {
      template: '#cpn',
      data() {
        return {
          title: '樱吹雪'
        }
      }
    })

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
      }
    })
  </script>

###data是函数形式的,不能是对象;函数有作用域

  <div id="app">
    <cpn1></cpn1>
    <cpn1></cpn1>
    <cpn1></cpn1>
  </div>

  <template id="cpn">
    <div>
      <h2>当前计数:{{counter}}</h2>
      <button @click='increment'>+</button>
      <button @click='decrement'>-</button>
    </div>
  </template>

  <script src="../js/vue.js"></script>
  <script>

    Vue.component('cpn1', {
      template: '#cpn',
      data() {
        return {
          counter: 0
        }
      },
      methods: {
        increment(){
          this.counter++;
        },
        decrement(){
          this.counter--;
        }
      }
    })

    const app = new Vue({
      el: '#app',
      data: {
        firstName: 'Kobe',
        age: 17,
      }
    })
  </script>

 

 

58-父==>子

 

<div id="app">
  <cpn :csuperstar='superstar' :cname='name'></cpn>
</div>
<template id="cpn">
  <div>
    <p>{{cname}}</p>
    <ul>
      <li v-for='item in csuperstar'>{{item}}</li>
    </ul>
  </div>
</template>

<script src="../js/vue.js"></script>
<script>

//Vue.compoment('cpn',{})
  const cpn = {
    template: '#cpn',
    // props: ['csuperstar','cname'],
    props: {
      // 1,类型限制
      // csuperstar: Array,
      // cname: String
      // 2,提供默认值以及必传值
      cname: {
        type: String,
        default: 'Kobe',
        required: true
      },
        // 类型为对象或数组(引用值)时候,默认值必须是一个函数
      csuperstar: {
        type: Array,
        default(){
          return []
        }
        
      }
    },
    data(){
      return {}
    },
    methods: {

    }
  }

  const app = new Vue({
    el: '#app',
    data: {
      name: 'Bryant',
      superstar: ['Curry','Jordan','James','Dukan','Onial']
    },
    components: {
      cpn
    }
  })
</script>

 

 

 

59-Vue小驼峰

<div id="app">
  <cpn :c-Super-Star='superStar' :c-Name='name'></cpn>
</div>
<template id="cpn">
  <div>
    <p>{{cName}}</p>
    <ul>
      <li v-for='item in cSuperStar'>{{item}}</li>
    </ul>
  </div>
</template>

<script src="../js/vue.js"></script>
<script>

// Vue.compoment('cpn',{})
  const cpn = {
    template: '#cpn',
    // props: ['csuperstar','cname'],
    props: {
      // 1,类型限制
      // csuperstar: Array,
      // cname: String
      // 2,提供默认值以及必传值
      cName: {
        type: String,
        default: 'Kobe',
        required: true
      },
        // 类型为对象或数组(引用值)时候,默认值必须是一个函数
      cSuperStar: {
        type: Array,
        default(){
          return []
        }
        
      }
    },
    data(){
      return {}
    },
    methods: {

    }
  }

  const app = new Vue({
    el: '#app',
    data: {
      name: 'Bryant',
      superStar: ['Curry','Jordan','James','Dukan','Onial']
    },
    components: {
      cpn
    }
  })
</script>

 

 

 

60

<div id="app">
  <!-- // 父组件监听 -->
  <cpn @itemclick="cpnClick"></cpn>
</div>

<template id="cpn">
  <div>
    <button v-for="item in categories" 
            @click="btnClick(item)">
      {{item.name}}
    </button>
  </div>
</template>

<script src="../js/vue.js"></script>
<script>

// Vue.compoment('cpn',{})
  const cpn = {
    template: '#cpn',
    data(){
      return {
        categories: [
          {id: 'a', name: '热门推荐'},
          {id: 'b', name: '手机数码'},
          {id: 'c', name: '家用电器'},
          {id: 'd', name: '电脑办公'}
        ]
      }
    },
    methods: {
      btnClick(item){
        // 子组件发射事件: 自定义事件
        this.$emit('itemclick', item)
      }
    }
  }

  const app = new Vue({
    el: '#app',
    data: {
      name: 'Bryant',
      superStar: ['Curry','Jordan','James','Dukan','Onial']
    },
    components: {
      cpn
    },
    methods: {
      cpnClick(item){
        console.log(item.name);
      }
    }
  })
</script>

 

 

 

62-回顾

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值