vue组件的创建

vue组件的创建

核心目标

为了可重用性高,减少重复性开发,我们可以按照template、style、script的拆分方式,放置到对应的.vue文件中。

组件概括

vue组件可以理解为预先定义好的ViewModel类。一个组件可以预定义很多选项,最核心的有:

  1. 模板template:模板反映了数据和最终展现给用户的DOM之间的映射关系,
  2. 初始数据data:一个组件的初始数据状态,对于可重复的组件来说,通常是私有的状态。
  3. 接收的外部的参数(props):组件之间通过参数来进行数据的传递和共享,参数默认是单项绑定,但也可以显示声明为双向绑定。
  4. 方法(methods):对数据的改动操作一般都在组件内进行。可以通过v-on指令将用户输入事件和组件方法进行绑定。
  5. 生命周期函数(钩子函数):一个组件会触发多个生命周期函数,在这些钩子函数中可以封装一些自定义逻辑。可以理解为controller的逻辑被分散到了这些钩子函数中。

注册组件

注册组件就是利用Vue.component()方法,先传入一个自定义组件的名字,然后传入这个组件的配置。

(组件名不要带有大写字母,多个单词使用中划线my-dom)

  • 全局组件
    (直接使用Vue.component()创建的组件,所有的Vue实例都可以使用。)
    (一般写插件的时候全局组件使用多一些)
    
    //第一种 定义与注册分开
       // 1. 使用vue.extend定义:
        const mycomponent = Vue.extend({
            template:`<div>组件</div>`
        })
        // 2. 注册:
        Vue.component("mycomponent",mycomponent);
    
    //第二种方式 定义与注册合并
    Vue.component('mycomponent',{      //自定义组件名mycomponent
        template: `<div>这是一个自定义组件</div>`,
        data () {
          return {
            message: 'hello world'
          }
        }
      })
  • 局部注册组件
    使用三部曲1.创建这个组件;2.注册这个组件;3.使用这个组件;
<div id="app">
    <mycomponent></mycomponent>   //3.组件的使用
    <my-component></my-component>    //3.组件的使用
</div>
<script>
  //1.创建这个组件
  const  mycomponent={
      template: `<div>这是一个局部的自定义组件,只能在当前Vue实例中使用{{aa}}</div>`,
      data(){
        return {'aa':'hello'}
      }
   };

  const  app = new Vue({
    el: '#app',
    data: {
    },
    components: {
      mycomponent,//2.注册这个组件
      }
    }
  })
</script>
  • 模板的要求:组件的模板只能有一个根元素。
// 第一种方式
template: `<div>
                元素1.....
                元素2.....
                元素3.....
           </div>`,

//第二种方式,模板内容用template包裹
<html>
/*template与<div id="app">同级*/
<template id="loginTpl">   
    <!-- 需要有个根标签 -->
      <div>
          <input type="text" placeholder="用户名"><br>
          <input type="password" placeholder="密码">
      </div>
</template>
</html>
实例中
    template: `#loginTpl`,

//第三种,模板内容用script包裹
<script type="text/html" id="loginTpl">   
    <!-- 需要有个根标签 -->
      <div>
          <input type="text" placeholder="用户名"><br>
          <input type="password" placeholder="密码">
      </div>
</script>
实例中
    template: `#loginTpl`,
  • 组件中的data必须是函数。

若用字面量定义data,复用组件时每个实例将共用同一个data,组件间的data就会相互影响,而使用一个函数,并返回一个新对象,这样每个实例就可以维护属于自己的data,而不会相互影响

data:function(){
            return {'aaa':'bbb'}//template中可以使用aaa
        },
//或
data(){
            return {'aaa':'bbb'}//template中可以使用aaa
        },
  • 组件的属性props。
    Vue组件通过props属性来声明一个自己的属性,然后父组件就可以往里面传递数据。
<div id="app1">
    //动态操作属性:name是变量(读取实例中data的值)
    <hello :n="name"></hello>
</div>
<div id="app2">
    // 静态的属性:name是常量(就是name)
    <hello n="name"></hello>
</div>
<script>
    Vue.component('hello',{
        props:['n'],//通过父组件传过来的数据 name变量
        data(){
            return {'aaa':'bbb'}
        },
        template:'<p>{{aaa}} {{n}}</p>'
    })
    var app1=new Vue({
        el:'#app1',
        data:{
            name:'haha'
        }
    })
    var app2=new Vue({
        el:'#app2',
        data:{
            name:'haha'
        }
    })
</script>

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值