Vue学习day4.md

一、组件

  • 组件化开发优势:复用性强 ,便于后期维护和开发
  • 什么是组件:包含了html,css,js的一个整体(js对象),是一个独立的功能
  • 单页面应用(SPA)
  • VUE的核心:数据驱动,组件化

1、组件使用

组件的全局注册

  • 语法
   Vue.component('组件名',{
    
    组件配置对象})
  • 使用(调用)组件
   <组件名></组件名>
  • 注意:

    • 全局注册组件需要放在vue实例化之前,所有的vue实例都可以使用
    • template指定了组件的模板信息
   <!DOCTYPE html>
   <html lang="en">
   <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <script src="./js/vue.js"></script>
      <style>
          ul{
     
     
              padding: 0;
              margin: 0;
              list-style: none;
              width: 500px;
              display: flex;
              height: 50px;
              border: 1px solid;
             
          }
          li{
     
     
              width: 99px;
              height: 50px;
              border-right: 1px solid;
              line-height: 50px;
              text-align: center;
          }
          .active{
     
     
              background-color: yellow;
              color:red;
          }
      </style>
   </head>
   <body>
     
      <div  id="app">
         <mycom></mycom>
         <hr/>
         <mycom></mycom>
      </div>
  
      <h3>---------分割线-------</h3>
      <div id="main">
          <mycom></mycom>
      </div>
   </body>
   <script>
   Vue.component("mycom",{
     
     
      // template指定组件的模板
     template: "<div><a href='#'>全局组件</a></div>"
   })
  
   // 全局注册组件需要放在vue实例化之前,所有的vue实例都可以使用
  
   var app=new Vue({
     
     
      el:"#app",   
      data:{
     
        
         
      }
   })
   var main=new Vue({
     
     
        el:"#main",
        data:{
     
     }
   })
   </script>
   </html>

组件的局部注册

  • 语法
   var app=new Vue({
    
    
      el:"#app",   
      data:{
    
        
      },
      components:{
    
    
          组件名:{
    
    配置对象},
          组件名:{
    
    配置对象}
      }
   })
  • 使用(调用)组件
   <组件名></组件名>
  • 注意

    • 局部组件只能在当前所在的实例去使用
   <!DOCTYPE html>
   <html lang="en">
   <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <script src="./js/vue.js"></script>
      <style>
          ul{
     
     
              padding: 0;
              margin: 0;
              list-style: none;
              width: 500px;
              display: flex;
              height: 50px;
              border: 1px solid;
             
          }
          li{
     
     
              width: 99px;
              height: 50px;
              border-right: 1px solid;
              line-height: 50px;
              text-align: center;
          }
          .active{
     
     
              background-color: yellow;
              color:red;
          }
      </style>
   </head>
   <body>
     
      <div  id="app">
          <mycon></mycon>
      </div>
  
      <h3>---------分割线-------</h3>
      <div id="main">
          <!-- <mycon></mycon> -->
      </div>
   </body>
   <script>
      var app=new Vue({
     
     
        el:"#app",   
        data:{
     
         
        },
        components:{
     
     
            // 组件名:{配置对象}
            // 局部组件只能在当前所在的实例去使用
            mycon:{
     
     
               template:`
                  <div>
                     <h3>我是局部组件</h3>
                  </div>
               ` 
            }
        }
      })
     var main=new Vue({
     
     
        el:"#main",
        data:{
     
     }
    })
   </script>
   </html>

2、组件命名

  • 不能是html标签名(html新增的语义标签:header,nav,main,aside,section,slider,article,footer…)
  • 命名尽量语义化
  • 组件那个组件名驼峰命名了,使用组件的时候需要用- 链接 比如组件名为myHead 使用
  • 单标签只可以使用一次,后面的将不再显示

3、template配置项

   <!DOCTYPE html>
   <html lang="en">
   <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <script src="./js/vue.js"></script>
      <style>
          ul{
     
     
              padding: 0;
              margin: 0;
              list-style: none;
              width: 500px;
              display: flex;
              height: 50px;
              border: 1px solid;
             
          }
          li{
     
     
              width: 99px;
              height: 50px;
              border-right: 1px solid;
              line-height: 50px;
              text-align: center;
          }
          .active{
     
     
              background-color: yellow;
              color:red;
          }
      </style>
   </head>
   <body>
     
      <div  id="app">
          <mycon></mycon>
          <mybb></mybb>
      </div>
      <template id="aa">
          <div>
              <div>
               <h3>我是局部组件</h3>
              </div>
              <div>789</div>
          </div>
      </template>
  
      <template id="bb">
         <div>123</div>
      </template>
   
   </body>
   <script>
     var app=new Vue({
     
     
        el:"#app",   
        data:{
     
         
        },
        components:{
     
     
            // 组件名:{配置对象}
            // 局部组件只能在当前所在的实例去使用
            mycon:{
     
     
               template:"#aa"
            },
            mybb:{
     
     
                template:"#bb"
            }
        }
    })
   </script>
   </html>

4、组件嵌套

   <body>
      <div  id="app">
         <mycon></mycon>
         <hr/>
         <mybb></mybb>
      </
   </body>
   <script>
   Vue.component("mycd",{
     
     
       template:"<a href='#'>00000</a>"
   })
  
   var app=new Vue({
     
     
       el:"#app",   
       data:{
     
         
       },
       components:{
     
     
          // 组件名:{配置对象}
          // 局部组件只能在当前所在的实例去使用
          mycon:{
     
     
             template:`
                <div>
                   mycon
                   <hr/>
                   <mycd></mycd>
                    <aa></aa>
                </div>
             `,
             components:{
     
     
                 aa:{
     
     
                     template:`
                        <div>aaa</div>
                     `
                 }
             }
          },
          mybb:{
     
     
              template:`
                 <div>
                    mybb
                 </div>
              `
          }
      }
   })
   </script>
   </html>

5、组件的配置选项(重点)

  • The “data” option should be a function that returns a per-instance value in component definitions.

    data选项应该是一个函数

  • 组件中的data是一个函数,返回一个对象

    • 组件的data不能是一个对象,因为一旦是一个对象,所有组件都会共享一个数据源,造成了数据的污染
    • 组件data必须是一个函数,函数返回一个对象,每次返回都会重新创建一个新对象
    • 组件的数据应该是独立的
  • template是指定模板的

  • 其他配置选项和vue实例一模一样的

   <body>
     
      <div  id="app">
         <mycon></mycon>
         <hr/>
         <mybb></mybb>
      </div>
   </body>
   <script>
   Vue.component("mycd",{
     
     
      template:`
         <div>
            mycd全局组件
            {
      
      {msg}}
            <button @click="fn">更改msg</button>
         </div>
      `,
      data:function(){
     
     
          return {
     
     
              msg:"成都"
          }
      },
      methods:{
     
     
          fn(){
     
     
              this.msg="nihao"
          }
      }
    })
    var app=new Vue({
     
     
      el:"#app",   
      data:{
     
         
      },
      components:{
     
     
          // 组件名:{配置对象}
          // 局部组件只能在当前所在的实例去使用
          mycon:{
     
     
             template:`
                <div>
                   mycon
                   <hr/>
                   <mycd></mycd>
                    <aa></aa>
                </div>
             `,
             components:{
     
     
                 aa:{
     
     
                     template:`
                        <div>aaa</div>
                     `
                 }
             }
          },
          mybb:{
     
     
              template:`
                 <div>
                    mybb
                 </div>
              `
          }
      }
   })
  
   </script>
   </html>

二、Vue CLI Vue脚手架开发

  • vue-cli脚手架工具:快速搭建一个vue项目

1、安装vue-cli

​ 确保电脑安装了node环境,输入以下命令检测是否安装了node

   node -v     //显示版本号说明安装了node    如果提示node不是内部命令,那就就去安装node

​ node的安装地址:https://nodejs.org/en/download/

   npm install vue-cli -g    //全局安装脚手架工具

如果电脑上安装了cnpm淘宝镜像,可以使用cnpm 安装

   cnpm install vue-cli -g

如果没有淘宝镜像先安装淘宝镜像

   npm install cnpm -g --registry=http://registry.npm.taobao.org

执行 cnpm/npm install vue-cli -g 该命令 安装脚手架工具

   vue -V    //显示版本号说明安装成功
   2.9.6

2、初始化vue项目

  • 找到需要存储项目的目录

  • 在该目录下执行命令

   vue init webpack 项目名(英文)
  • 启动项目
   npm run dev
   or
   npm start

3、创建项目过程详解

在这里插入图片描述

4、目录及文件介绍

在这里插入图片描述
在这里插入图片描述

三、Vue源码介绍

Vue源码之import Vue

   import Vue from 'vue'
  
   //完整写法
   import Vue from "../node_modules/vue/dist/vue.js"
   
   //因为main.js是在src文件中,所以../向前一级相对目录查找node_modules,再依次寻找后面的文件。
  • 1.import…from…的from命令后面可以跟很多路径格式,若只给出vue,axios这样的包名,则会自动到node_modules中加载;若给出相对路径及文件前缀,则到指定位置寻找。
  • 2.可以加载各种各样的文件:.js、.vue、.less等等。

可以不输入后缀名既加载是因为这个原因:

   webpack解析里的扩展配置:
   resolve: {
   extensions: ['.wasm', '.js', '.vue', '.json']
   }

猜你喜欢

转载自blog.csdn.net/qq_41008567/article/details/108015356
今日推荐