vue-component组件

一、Component 组件

组件(Component)是自定义封装的功能。在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的页面之间,也存在同样的功能。将相同的功能进行抽取,封装为组件,这样,前端人员就可以在组件化开发时,只需要书写一次代码,随处引入即可使用。

组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象 为一个组件树。

二、全局组件

1、语法格式

js 复制代码
Vue.component("组件名称", {
    template: "html代码",  // 组件的HTML结构代码
    data(){ //组件数据
        return {}
   },
    methods: {  // 组件的相关的js方法
        方法名(){
            // 逻辑代码
       }
   }
})

注意:

  1. 组件名以小写开头,采用短横线分割命名: 例如 hello-Word
  2. 组件中的data 必须是一个函数,注意与Vue实例中的data区分
  3. 在template模板中, 只能有一个根元素

2、代码演示

  1. 代码

    js 复制代码
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
      </head>
      <body>
        <div id="app">
          <!-- 使用组件 -->
          <my-header></my-header>
        </div>
      </body>
    
      <script src="js/vue.min.js"></script>
      <script>
        // 定义全局组件
        //组件的命名规则: 一般用短横线进行连接,左边是公司名 右边组件的作用名称
        Vue.component("my-header", {
          template: "<div><h1 @click='test'>{{title}}</h1> </div>", //template模板中 只能有一个根元素
          //组件中的data是一个函数
          data() {
            return {
              title: "测试标题",
            };
          },
          methods: {
            test() {
              alert("测试方法!");
            },
          },
        });
    
        var Vm = new Vue({
          el: "#app",
          data: {},
          methods: {},
        });
      </script>
    </html>
  2. 测试结果

三、局部组件

1、语法格式

相比起全局组件,局部组件只能在同一个实例内才能被调用。局部组件的写法和全局组件差不多。 唯一不同就是:局部组件要写在Vue实例里面。

js 复制代码
new Vue({
    el: "#app",
    components: {
        组件名: {
            // 组件结构
            template: "HTML代码",
            // data数据
            data() { return { msg:"xxxx" };},
       },
   },
});

2、代码演示

  1. 代码
js 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <!-- 使用组件 -->
      <test-component></test-component>
    </div>
  </body>

  <script src="js/vue.min.js"></script>
  <script>
    var Vm = new Vue({
      el: "#app",
      data: {},
      methods: {},
      // 创建组件
      components: {
        "test-component": {
          template: "<div><h1>{{msg}}</h1></div>",
          data() {
            return {
              msg: "测试局部组件!",
            };
          },
        },
      },
    });
  </script>
</html>
复制代码
注意: 创建局部组件,注意 components,注意末尾有 's',而全局组件是不用+ 's' 的。这意味着,components 里可以创建多个组件。
  1. 测试结果

四、组件与模板分离

由于把html语言写在组件里面很不方便,也不太好看所以将它们分开写

  1. 代码

    js 复制代码
    <!DOCTYPE html>
    <html lang="en">
     <head>
       <meta charset="UTF-8" />
       <meta name="viewport" content="width=device-width, initial-scale=1.0" />
       <title>Document</title>
     </head>
     <body>
       <div id="app">
         <!-- 使用组件 -->
         <test-component></test-component>
       </div>
    
       <!-- 将模板写在html中,给模板指定id -->
       <template id="tmp">
         <div>
           <button @click="test">{{testmsg}}</button>
         </div>
       </template>
     </body>
    
     <script src="js/vue.min.js"></script>
     <script>
       var Vm = new Vue({
         el: "#app",
         data: {},
         methods: {},
         components: {
           "test-component": {
             template: "#tmp", //此处绑定上面写的template id
             data() {
               return {
                 testmsg: "测试消息~",
               };
             },
             methods: {
               test() {
                 alert("测试方法!");
               },
             },
           },
         },
       });
     </script>
    </html>
    • 浏览器会把 html 里的 template 标签过滤掉。所以 template 标签的内容是不会在页面中展示的。直到它被 JS 中的 Vue 调用。
    • 在 html 中,template 标签一定要有一个id,因为通过 id 是最直接被选中的。data 和 methods 等参数,全部都要放到 Vue 实例里面写。
  2. 测试结果

相关推荐
醉城夜风~20 分钟前
CSS元素显示模式(display)
前端·css
AI大模型-小华1 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子3 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅3 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni4 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学5 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端
赵庆明老师5 小时前
Vben精讲:21-详解web-antd:tsconfig.json
前端·json·vim
wc886 小时前
微软EDGE浏览器功能学习
前端·学习·edge
破z晓6 小时前
javascript 导出excel表
开发语言·javascript·excel