Vue组件

Vue有两大特性

  1. 指令 – 用来操作dom
  2. 组件 – 组件是html css js 等的一个聚合体

为什么要使用组件

  1. 组件化
    • 将一个具有完整功能的项目可以多处,多次使用
    • 加快项目开发的进度
    • 可以进行项目的复用
  2. 想要实现组件化,那我们使用这一部分必须是完整的,我们把这个完整的整体称之为–组件。
  3. 插件: 是由 index.html img css js 等几部分组成,如果其中一部分,因为意外缺失,那么这个插件也就不能使用了。
  4. 因此 如果能将 html css js img 等多个部分放在一起,那该有多好,vue将这个聚合体的文件称之为,单文件组件( xx.vue )

基础的组件创建

  • Vue.extend() 是 vue用来扩展 vue功能( 组件 )的
    因为组件扩展的实例化和Vue 本身的实例化,基本一致,所以Vue可能觉得这样不算扩展。于是就不使用这种组件扩展的方法。
  • 于是vue借鉴了react,react中组件是以标签的形式使用的,vue 决定组件要以标签的形式呈现
  • 为了符合 html / html5的规则,所以组件的标签化使用必须注册
  • 注册说白了就是用来解析这个标签化的组件为html能识别的标签
    • 注册语法:component( '组件名’,option)
    • 有连个关键词 : component:成分,template:模版
    • component 是注册 关键词,template 是模板关键词。
  1. 全局注册
  2. 局部注册
<body>
   <div id="app">
     <Father></Father>				<!-- 使用全局组件 -->
     <son></son>		<!-- 使用全局组件 -->
   </div>
   <div id="root">
 	  <Father></Father>  		<!-- 使用全局组件 -->
 	</div>
 </body>
 <script>
 
   Vue.component('Father',{
     template: '<div> 这里是全局注册 </div>'
   })
  //所有模块都能使用 这个组件
   new Vue({
     el: '#app',   // 模板1
     components: {			//只有组件所在的模块 才能使用这个模块
       'son': {
         template: '<div> 这里是局部注册 </div>'
       }
     }
   })
   new Vue({    //模板2
     el: '#root'
   	})

 </script>

注意: 组件注册只有卸载 Vue 实例前,实例才能使用。

组件的嵌套

  • 父组件里面放子组件 ----> 类似于dom结构的父子级结构
  • 将子组件以标签的形式放在父组件的模板中使用
  • 切记,不要放在父组件的内容中
//有两中写法:
// 第一种: 父组件,和子组件 分开写
 Vue.component('Father',{   //父组件
    template: '<div> Father <Son></Son></div>'  //里边的 son 标签是子组件
  })
  Vue.component('Son',{     //子组件
    template: '<div> son </div>'
  })
// 第二种,子组件直接写在 父组件之内
new Vue({
    el: '#app',
    components: {  //定义父组件
      'Father': {
        template: '<div> father组件 <Son /></div>',    
        //你可能注意到了,这里子组件是半标签,没错 可以写半标签,
        //但是不推荐这样写,H5 提倡,标签成对,因此我们最好把标签写全。
        components: {  //定义子组件
          'Son': {
            template: '<div> son组件 </div>'
          }
        }
      }
    }
  })

is规则

<body>
  <div id="app">
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <Hello></Hello> 
       <!-- 正常情况下我们想把组件放在 table 中,但是这样写的话,组件会出现在 table 外边-->
      <tr is = "Hello"></tr>  
       <!-- 我们这样写,才能把组件插入到 table -->
    </table>
  </div>
</body>
<script>
  /* 
    is规则
      ul>li  ol>li   table>tr>td      select>option
    如上直属父子级如果直接组件以标签化形式使用,那么就会出现bug
    解决: 使用is规则: 通过is属性来绑定一个组件
     <tr is = "Hello"></tr>
  */
  Vue.component('Hello',{
    template: '<tr> <td> 4 </td> <td> 5 </td><td> 6 </td></tr>'
  })
  new Vue({
    el: '#app'
  })
</script>

template 标签

template使用:

  1. 实例范围内使用
    template中的内容被当做一个整体了,并且template标签是不会解析到html结构中的
  2. 实例范围外使用
    实例范围外template标签是不会被直接解析的

组件要想使用template使用,我们采用第二种
但是使用第二种template使用后,有个弊端,template标签结构会在html文件中显示
解决: 使用webpack、gulp等工具编译,将来要用vue提供的单文件组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值