探索学习 Vue 组件篇 第七篇 组件类型:单文件组件

探索学习 Vue 组件篇

Vue 官网: https://cn.vuejs.org/v2/guide/forms.html
尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通 https://www.bilibili.com/

第七篇 组件类型:单文件组件

  • 这一节进入单文件的学习,让我们对Vue项目开发整体项目结构的初步了解 从 main.js index.html 到 App.vue 再到Student.vue School.vue 从入口文件到页面应用组件有一个清晰的认识

1. 回顾

  • 回顾一下组件的定义是啥: 实现界面局部功能代码和资源的集合叫组件
  • 一个标准的组件需要有三个元素
    • 1、页面也就 html ;
    • 2、样式也就是CSS ;
    • 3、数据也就是js处理的交互数据
  • 在Vue中也是如此定义的
    • 组件的结构(页面)
      • <template></template>
    • 组件的交互相关代码(数据、方法等等)
      • <script></script>
    • 组件的样式(css)
      • <style></style>

2. 非单文件组件到单文件组件的进阶

2.1. 组件的结构
  • <template></template>
       <template>
           <div>
               <h2>学校名称:{{schoolName}}</h2>
               <h2>学校地址:{{schoolAddress}}</h2>
               <button @click='showName'>点我显示学校名</button>
           </div>
       </template> 
    
2.2. 组件的交互
  • <script></script>
  • 直接把之前写的代码复制到交互代码部分
         <script>
         const school = Vue.extend({
             data(){
                 return {
                     schoolName: '天津安锐捷大学',
                     schoolAddress: '普天科技园'
                 }
             },
             methods: {
                 showName(){
                     console.log("组件实例对象:",this)
                 }
             },
         })
         </script>
    
  • 注意这 种做法其实是不对的,我们这边写的终规是组件,以后都是要引入(import )用的(es6 模块化知识),所以这块是需要暴露出去的
  • 有三种暴露的方式
    • 1、分别暴露:export const school = Vue.extend({……})

    • 2、统一暴露: 写到最后

           const school = Vue.extend({……})
           export {school} 
      
    • 3、默认暴露:

          const school = Vue.extend({……})
         export default {school} 
      
  • 一般情况下,我们使用默认暴露:
    • 精简一下默认暴露:定义的这个中转变量可以精简,如下
          export default Vue.extend({
              data(){
                  return {
                      schoolName: '天津安锐捷大学',
                      schoolAddress: '普天科技园'
                  }
              },
              methods: {
                  showName(){
                      console.log("组件实例对象:",this)
                  }
              },
          })
      
    • 精简一下默认暴露:创建组件也是可以精简的,创建组件时 Vue.extend() 默认是可以省略的,直接暴露配置对象,如下
        export default {
            data(){
                return {
                    schoolName: '天津安锐捷大学',
                    schoolAddress: '普天科技园'
                }
            },
            methods: {
                showName(){
                    console.log("组件实例对象:",this)
                }
            },
        }
      
    • 完善的写法应该带上组件名称name,如下
        export default {
            name: 'School', //建议跟文件名称一致
            data(){
                return {
                    schoolName: '天津安锐捷大学',
                    schoolAddress: '普天科技园'
                }
            },
            methods: {
                showName(){
                    console.log("组件实例对象:",this)
                }
            },
        }
      
    • 此时此刻 一个完整的单文件组件就写完了,
2.3. 单文件组件:学生组件
  • 完善了单文件组件,我们趁热打铁
           <template>
               <div class="demo">
                   <h2>学生名称:{{studentName}}</h2>
                   <h2>学生年龄:{{studentAge}}</h2>
               </div>
           </template>
    
           <script>
           export default {
               name: 'Student', //建议跟文件名一致
               data(){
                   return {
                       studentName: '安锐捷',
                       studentAge: '3'
                   }
               }
           }
           </script>
    
           <style>
               .demo{
                   background-color: orange;
               }
           </style>
    

3. App.vue (组件中的王者)

  • 定义一个管理所有组件的组件 App.vue 同时把学生、学校组件注入管理起来
           <template>
               <div>
                   <School></School>
                   <Student></Student>
               </div>
           </template>
           <script>
           // App.vue主要作用:汇总所有组件
    
           //引入组件
           import School  from './School.vue'
           import Student from './Student.vue'
    
           export default {
               name: 'App',
               //注册组件
               components: {
                   School,
                   Student
               }
           }
           </script>
    

4. main.js (入口文件)

  • 一般情况,所有的组件都得听从一个实例对象vm 的分配,所以需要一个vm,在这里如何创建一个vm实例呢

  • 我们创建一个main.js,只有App.vue才有资格与 main.js 对话;

    //引入组件
        import App from './App.vue'
    
        //创建Vue实例 vm
        new Vue({
            el:'#root',
            comments:{App}
        })
    
  • 上面实例创建好了,我们需要放到容器里面 #root 容器在哪里呢??引出我们后面要内容 index.html

5. index.html (入口页面)

  • 标准化开发中,我们需要创建一个index.html 这个就是App 的容器
    <!DOCTYPE html>
        <html lang="en">
    
        <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>demo</title>
        </head>
        <!--注意提前引用,可能会导致main.js 去拿结构,但是结构还没有,所以这块需要放到后面引用-->
        <!-- <script type="text/javascript" src="./main.js"></script> -->
        <body>
            <div id="root">
                <h1>你好,{{name}}</h1>
                <hr/>
                  <!--引入组件,如果此处不想写,可以直接写到template中-->
                  <App></App>
            </div>
            <!--main.js 中用到了 new Vue 所以先引入 new Vue-->
            <script type="text/javascript" src="../js/vue.js"></script>
            <!--先让模板出来,在引用-->
            <script type="text/javascript" src="./main.js"></script>
        </body>
        </html>
    
    • 注意,因为浏览器里面不能直接运行es6语法,所以直接运行index.html 会报错
      在这里插入图片描述

      其实就是main.js 里面的第一行 引入就已经不支持了,此处不需要着急,一但引入了脚手架,一切就都OK了

创作不易,欢迎 多多点赞,收藏 各节里面总结的还有不到位的欢迎指证
邮箱:pymxb1991@163.com
微信:py_mxb

业无高卑志当坚,男儿有求安得闲。 《示秬秸》 宋代 张耒

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值