vue组件使用详解(入门级教学)

6、Vue中组件(Component)

6.1、组件作用

​ 组件作用:用来减少Vue实例中的代码量,日后在使用vue开发的过程中,可以根据不同业务功能将页面划分不同的多个组件,然后由多个组件去完成整个页面的布局。便于日后使用Vue进行开发时页面管理,方便开发人员维护。

6.2、组件的使用

6.2.1、全局组件注册

说明:全局组件注册给Vue实例,日后可以在任意Vue实例的范围内使用该组件

1、开发一个全局组件
//全局组件注册 参数1:组件名称   参数2:组件配置对象:{}
// template:用来书写组件的html模板(注意:在template中必须存在一个容器 例如 div)
Vue.component('login',{
    
    
    template:'<div> <h1>用户登录</h1> </div>'
});
2、使用全局组件  在Vue实例范围内
<login></login>
# 注意:
	1、Vue.component 用来开发全局组件  
	参数1: 组件名称  
	参数2:组件配置():'' 用来书写组件的html代码,template中必须有一个root元素
	2、使用时需要在Vue的作用范围内根据与组件名使用全局组件
	3、如果在注册组件的过程中使用 驼峰命名组件的方式,在使用组件时,必须将驼峰的所有单词小写加入—进行使用

6.2.2、局部组件的使用

说明:通过将组件注册给对应Vue实例中一个Components属性来完成组件注册,这个方式不会对Vue实例造成累加

  • 第一种开发方式
<script>
    //局部组件登录模板
    let login ={
    
    
        //具体组件名称
        template: '<div><h2>小爽帅到拖网速2</h2></div>'
    }

    const app = new Vue({
    
    
        el: "#app",
        data: {
    
    
            msg: "小爽帅到拖网速",
        },
        methods: {
    
    },
        components:{
    
    
            //用来注册局部组件
            login:login   //注册局部组件
        }
    });
</script>

//局部组件使用  在Vue实例范围内
<login></login>
  • 第二种开发方式

    //1、声明局部组件模板,template 标签:注意 :Vue实例作用访问外声明
    	<template id="loginTemplate"> <h1>小爽帅到拖网速 之 方式二</h1> </template>
    //2、定义变量用来保存模板配置对象
         let login={
          
          
             //具体局部组件名称
             template:'#lgoinTemplate'  //使用自定义template标签选择器即可
         };
    //3、注册组件
     const app = new Vue({
          
          
            el: "#app",
            data: {
          
          
                msg: "小爽帅到拖网速",
            },
            methods: {
          
          },
            components:{
          
          
                //用来注册局部组件
                login:login   //注册局部组件
            }
        });
    //4、局部组件使用 在Vue实例范围内
    	<lgoin></login>
    

6.3、Prop的使用

作用:props用来给组件传递相应静态数据或者是动态数据

6.3.1、通过在组件上声明静态数据传递给组件内部

//1、声明组件模板配置对象   props作用  用来接收使用组件时通过组件标签传递的数据
	let login={
    
    
        template:"<div><h1>欢迎:{
    
    {name}} 座右铭:{
    
    {motto}}</h1></div>",
        props:['name','motto']
    }
    
//2、注册组件
    const app = new Vue({
    
    
        el: "#app",
        data: {
    
    },
        methods: {
    
    },
        components:{
    
    
            login  //组件注册
        }
    });
//3、通过组件完成数据传递
	<login name="小爽" motto="木叶飞舞之处,火亦生生不息!"></login>
# 总结
	1、使用组件时可以在组件上定义多个属性以及对应数据
	2、在组件内部可以使用props数组声明多个定义在组件上的属性名 日后可以在组件中通过{
   
   {属性名}}方式获取数组中属性值

6.3.2、通过在组件上声明动态数据传递给组件内部

//1、声明组件模板对象
 //定义一个局部组件声明
    const login={
    
    
        template:'<div><h2>火影:{
    
    {name}} 年龄:{
    
    {age}}</h2></div>',
        props: ['name','age']
    }
//2、注册局部组件
     const app = new Vue({
    
    
        el: "#app",
        data: {
    
    
            msg: "小爽帅到拖网速",
            Age:21
        },
        methods: {
    
    },
        components:{
    
    
            login //注册组件
        }
    });
//3、使用组件
//使用v-bind 形式将数据绑定Vue实例中data属性,日后data属性发生变化,组件内部数据也跟着发生变化
<login :name="msg" :age="Age"></login> 

6.3.3、prop的单向数据流

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。

这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。

额外的,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。

6.4、组件中定义数据和事件

1、组件中定义属于组件的数据

const login={
    
    
    template:"<div><h1>欢迎:{
    
    {name}} </h1> <ul><li v-for='(item,index) in lists'>{
    
    {index+1}}:{
    
    {item}}</li></ul></div>",
    data(){
    
    
        return {
    
    
            name:"小爽",
            lists:['spring','springMVC','Mybatis']
        }
    }
}

2、组件中事件的定义

const login={
    
    
    template:"<input type='button' @click='change' value='点击触发事件'>",
    data(){
    
    
        return {
    
    
            name:"小爽",
            lists:['spring','springMVC','Mybatis']
        }
    },
    methods:{
    
    
        change(){
    
    
            alert(this.name);
        }
    }
}
# 总结
	1、组件中定义事件和直接在Vue中定义事件基本一致,直接在组件内部对应html代码加入@事件名-函数名方式即可
	2、在组件内部使用methods属性用来定义对应的事件即可,事件函数中this指向的是当前组件的实例

6.5向子组件中传递事件并在子组件中调用该事件

在子组件汇总调用传递过来的相关事件必须使用 this.$emit(‘函数名’) 方式调用

//1、声明组件
	 const login = {
    
    
        template: "<div> <h1>小爽{
    
    {message}} </h1><input type='button' value='点击' @click='change'></div>",
        /*不能再子组件中改变数据*/
        data() {
    
    
            return {
    
    
                message: this.name
            }
        },
        methods: {
    
    
            change() {
    
    
                //调用Vue实例中的函数
                this.$emit('find'); //调用组件传递过来的其他函数时需要使用this.$emit('函数名调用')
            }
        },
        props: ['name']
    }
//2、组件注册
     const app = new Vue({
    
    
        el: "#app",
        data: {
    
    
            msg: "小爽帅到拖网速",
        },
        methods: {
    
    
            findAll(){
    
       //一个事件函数  将这个函数传递给子组件
                alert('Vue实例中定义的函数')
            }
        },
        components: {
    
    
            login
        }
    });
//3、使用组件
<div id="app">
  <login :name="msg" @find="findAll"></login>    ======》 在组件内部使用  this.$emit('find')
</div>

猜你喜欢

转载自blog.csdn.net/weixin_46195957/article/details/111684454