Vue组件

一、组件化

1.1简介

组件(component)是vue.js最强大的功能之一。组件的作用就是封装可重用的代码,通常一个组件就是一个功能体,便于在多个地方都能够调用这个功能体。 每个组件都是Vue的实例对象。 我们实例化的Vue对象就是一个组件,而且是所有组件的根组件

1.2全局注册组件

定义组件语法

<body>
    <div id="app">
      <my-header></my-header>
      <my-header></my-header>
      <my-header></my-header>
    </div>
  </body>

  <script>
    Vue.component("my-header", {
      data: function() {
        return {
          title: "头部标题内容"
        };
      },
      template: `
      <div>
          <button @click='handle'>点击</button>
          <div>{
  {title}}</div>
      </div>
      `,
      methods: {
        handle: function() {
          console.log(this.title);
        }
      }
    });
    var vue = new Vue({
      el: "#app",
      data: {},
      methods: {},
      computed: {}
    });
  </script>

注意点

1.组件中的data是一个函数,不是对象

2.组件中必须有一个唯一的根元素

3.模板中内容较多时候建议使用模板字符串

1.2局部注册组件

<body>
    <div id="app">
      <my-header></my-header>
      <my-footer></my-footer>
    </div>
  </body>

  <script>
    let myHeader = {
      data: function() {
        return {
          title: "头部标题的内容"
        };
      },
      template: `
      <div>
        <button @click="handle">点击</button>
        <p>{
  {title}}</p>
      </div>
     `,
      methods: {
        handle: function() {
          console.log(this.title);
        }
      }
    };
    let myFooter = {
      data: function() {
        return {
          title: "底部标题的内容"
        };
      },
      template: `
      <div>
        <button @click="handle">点击</button>
        <p>{
  {title}}</p>
      </div>
     `,
      methods: {
        handle: function() {
          console.log(this.title);
        }
      }
    };
    var vue = new Vue({
      el: "#app",
      data: {},
      methods: {},
      computed: {},
      components: {
        "my-header": myHeader,
        "my-footer": myFooter
      }
    });
  </script>

或者也可以这样写

<body>
    <div id="app">
      <my-header></my-header>
      <my-footer></my-footer>
    </div>
    <!-- 定义头部组件模板 -->
    <template id="my-header">
      <div>我是头部内容{
  { title }}</div>
    </template>
    <!-- 定义底部组件模板 -->
    <template id="my-footer">
      <div>我是底部内容{
  { title }}</div>
    </template>
  </body>

  <script>
    let myHeader = {
      data: function() {
        return {
          title: "头部"
        };
      },
      template: "#my-header",
      methods: {
        handle: function() {
          console.log(this.title);
        }
      }
    };
    let myFooter = {
      data: function() {
        return {
          title: "底部"
        };
      },
      template: "#my-footer",
      methods: {
        handle: function() {
          console.log(this.title);
        }
      }
    };
    var vue = new Vue({
      el: "#app",
      data: {},
      methods: {},
      computed: {},
      components: {
        "my-header": myHeader,
        "my-footer": myFooter
      }
    });
  </script>

注意

1.局部注册的子组件只能在注册过的父组件中使用

<
  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值