返回顶部
首页 > 资讯 > 精选 >如何进行vue组件入门
  • 770
分享到

如何进行vue组件入门

2023-06-22 06:06:02 770人浏览 八月长安
摘要

本篇文章给大家分享的是有关如何进行Vue组件入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。初识组件应用实例化多个vue对象用new创建多个vue对象并命名,可以通过变量相互

本篇文章给大家分享的是有关如何进行Vue组件入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

初识组件应用

实例化多个vue对象

用new创建多个vue对象并命名,可以通过变量相互访问
例子:对象2修改对象1的name变量

<!-- 第一个根元素 --><div id="vue-app-one">这里是:{{name}}</div> <!-- 第二个根元素 --><div id="vue-app-two">    <p>这里是:{{name}}</p><br>    <button @click="changeName">change-one-name</button>    <!-- 点击后修改vue-app-one的name值--></div>
 // 第一个vue对象var one = new Vue({    el:"#vue-app-one",    data:{        "name":"ccy1"    }}) // 第二个vue对象var two = new Vue({    el:"#vue-app-two",    data:{        "name":"ccy2"    },    methods:{        // 修改vue-app-one的name为'ccy333'        changeName:function(){            one.name = 'ccy333'        }    }})

效果:点击后修改”ccy1“为”ccy333“

如何进行vue组件入门

全局组件

定义与使用

  • 定义全局组件,需给组件一个名字,调用时,将组件名当作标签名使用;相当于自定义标签,该标签下可以包含很多子html标签;

  • 这些子html标签定义在组件的template属性中,每次调用该组件,都渲染template里的标签

  • template里必须只有一个根元素

  • 在组件中,data是函数,将数据return回去

  • 依然可以用this来调用data中定义的数据

例子:

定义组件:

① 定义一个组件,命名为my-component
② 其中包含数据:name和方法:changeName
③ 渲染出的html效果有一个p标签,包含一个按钮,点击按钮时,修改name
④ 命名规范:camelCase (驼峰命名法) 与kebab-case (短横线分隔命名)

  • 当写成标签时,遇到有大写字母的命名,需要改成小写并用横杆链接前后两个部分,如定义组件时命名为myComponent,写成标签时应写成<my-component>;

  • 组件定义时也可以用横杆法命名;

  • 如果定义时用myComponent,标签用<my-component>是OK的,系统自动识别

// 自定义的全局组件my-component// template中只有一个根元素p标签,里面包含一个button按钮Vue.component('my-component',{    template:`<p>        我的名字是:{{name}}        <button @click='changeName()'>btn</button>        </p>`,    data(){        return {            name:'ccy'        }    },    methods:{        changeName:function(){            this.name = '安之'        }    }})// vue对象1new Vue({    el:"#vue-app-one",})// vue对象2new Vue({    el:"#vue-app-two",})

使用组件:

① 在vue对象对应的根元素(el指定标签)下使用
② 由于定义的是全局组件,所以可以在任意的vue对象下使用
③ 组件可复用,在一个vue对象下可以使用多次,且组件间互相独立

<p id="vue-app-one">    <my-component></my-component>    <my-component></my-component></p> <p id="vue-app-two">    <my-component></my-component></p>

效果:
如何进行vue组件入门

data是一个函数

在vue对象中,data属性值是一个对象,比如这样的:

如何进行vue组件入门
      但是在全局组件中,同一份data可能被多个vue对象使用,每个对象不单独维护一份data时,如果某一个vue对象修改了data中的一个变量,其他vue对象获取data时就会被影响;

如果用上面的例子做案例,若组件中的data是对象(引用),其他地方均不改变,两个vue对象便共享同一个name变量;当我通过其中一个vue对象改变name数据时(即点击任一个btn按钮),另一个对象获得的name也发生了改变(其他按钮处的’ccy’也都被改成了’安之’)

因此,为保证数据的独立性,即每个实例可以维护一份被返回对象的独立的拷贝,data为每个实例都return一份新创建的数据,不同的vue对象获取的data均互不影响

vscode中不允许组件中的data是对象,会报错:

[Vue warn]: The “data” option should be a function that returns a per-instance value in component definitions.

局部组件

  • 局部组件注册在某个vue对象中,

  • 只有注册过该局部组件的vue对象才能使用这个局部组件

例子:
局部组件定义

// template仅一个根元素:ulvar msGComponent = { // 数据是自身提供的 (hobbies)    template:`<ul><li v-for='hobby in hobbies' v-bind:key='hobby.id'>{{hobby}}</li></ul>`,    data(){        return {            hobbies:['看剧','看动漫','吃好吃的']        }    }}

注册局部组件:

// 仅由注册过该局部组件的vue对象才能使用,此处为p#vue-app-one// 注意命名规范,components中对象的key将会被作为标签名,多个单词拼接的命名需使用横杆法// 可以写成msg-component,此处直接简化了命名为msg,new Vue({    el:"#vue-app-one",    components:{        "msg": msgComponent    }})

html文件中使用<msg></msg>

<p id="vue-app-one">    <p>这里是vue-app-one</p>    <mycomponent></mycomponent>    <mycomponent></mycomponent>    <p>我的爱好:</p>    <msg></msg> <!--使用局部组件--></p>

效果: 红框圈出的部分就是局部组件渲染出来的
如何进行vue组件入门

父向子传值/传引用:prop

静态传值

创建子组件:

var titleComponent = {    props:["title"],    template:`<p>{{title}}</p>`    // 所需要的数据title由父组件提供}

在父组件的components属性中注册子组件:

new Vue({    el:"#vue-app-one",    components:{        "msg": msgComponent,        "titleComponent":titleComponent    },})

在父组件上使用子组件:

<!-- p#vue-app-one为父组件 --><p id="vue-app-one">    <p>这里是vue-app-one</p>    <mycomponent></mycomponent>    <mycomponent></mycomponent><!--使用子组件title-component,并传值"我的爱好:"给子组件-->    <title-component title="我的爱好:"></title-component>    <msg></msg></p>

效果:红框标记处就是父向子传值并展示

如何进行vue组件入门

动态传值:v-bind

定义子组件:

var titleComponent = {    props:["title"],    template:`<p>{{title}}</p>`}

在父组件的components属性中注册子组件:

new Vue({    el:"#vue-app-one",    components:{        "msg": msgComponent,        "titleComponent":titleComponent    },    data(){        return {            title:"my hobbies are ",        }    }})

使用子组件,通过绑定父组件data中的变量title来实现动态传值:

<!-- p#vue-app-one为父组件 --><p id="vue-app-one">    <p>这里是vue-app-one</p>    <mycomponent></mycomponent>    <mycomponent></mycomponent>    <!-- 动态绑定title -->    <title-component v-bind:title="title"></title-component>    <msg></msg></p>

效果:红框处就是动态绑定获取数据的展示
如何进行vue组件入门
传递数组等复杂数据时,也可以使用v-bind来动态传值,如:
需要向子级传递hobbies数组,在vue实例对象(父)中创建数据hobbies

new Vue({    el:"#vue-app-one",    components:{        "msg": msgComponent,        "titleComponent":titleComponent    },    data:{        title:"my hobbies are ",        hobbies:['看剧','看动漫','吃好吃的'], //需要向子组件传递的数据    }})

定义子组件

var msgComponent = {    template:`            <p>{{hobby}}</p>            `,    props:["hobby"],    data(){        return {           }    }}

使用子组件

<!-- p#vue-app-one为父组件 --><p id="vue-app-one">    <p>这里是vue-app-one</p>    <mycomponent name="ccy"></mycomponent>    <mycomponent name="ccy"></mycomponent>    <title-component v-bind:title="title"></title-component>    <!-- 动态传值:hobbies -->    <msg v-for="hobby in hobbies" v-bind:hobby="hobby" v-bind:key="hobby.id"></msg></p>

效果:
如何进行vue组件入门
跳回“一点想法”处

子向父:事件传值$emit

子组件不能通过prop向父组件传递数据,需要使用事件向父组件抛出一个值,告知父组件我需要实现一个功能,由父组件处理这个事件

例子:点击按钮,改变名称chinesename
(由于data变量名不支持chinese-name形式,花括号里不支持chineseName形式,所以这里我都用了小写,此处记录一下,日后学到了新知再来填坑)

先在父组件的data中定义chinesename的初始值:

new Vue({    el:"#vue-app-one",    data:{         chinesename:"anzhi" // chinesename初始值    }})

创建子组件,并注册事件change-name(就像click事件一样,需要让系统能够辨认这是一个事件并监听,当事件被触发时,执行某项约定好的操作):

  Vue.component('blog-post', {    props: ['chinesename'],    template: `      <p class="blog-post">        <h4>{{ chinesename }}</h4>        <button v-on:click='$emit("change-name","ruosu")'>            修改名字        </button>      </p>    `    // blog-post组件包含一个h4,显示chinesename,和一个按钮    // 点击这个按钮,触发change-name事件,将"ruosu"作为参数传递给指定的处理函数onChangeName  })

在父组件中使用子组件,定义change-name的处理函数为onChangeName:

<p id="vue-app-one">    <p>这里是vue-app-one</p><!-- v-bind:通过prop给子组件传递chinesename的初始值 --><!-- v-on:子组件通过$emit给父组件传递新的chinesename的值 --><p id="blog-posts-events-demo">      <blog-post        v-bind:chinesename='chinesename'        v-on:change-name = "onChangeName"      ></blog-post> </p></p>

在父组件处定义事件处理函数onChangeName:

new Vue({    el:"#vue-app-one",    data:{          chinesename:"anzhi"    },    methods:{        onChangeName:function(value){        // 将chinesename换成传递过来的数据            this.chinesename=value        }    }})

效果:
如何进行vue组件入门

一点想法

关于父子组件的区分,在此写一点总结,还是日后学了新知识再来填坑 ┗|`O′|┛ 嗷~~

官网中没有很明确指明两者的定义和区别,在网上搜了一圈,觉得比较多人认可并且好理解的是:

  • el指定的根元素为父组件(使用之处为父组件)

  • vue实例对象也可看做组件

在前面这些父子传值的例子中,我们可以看到,对于局部组件,我们会在某个html根元素中注册并使用,所以此时el指定的根元素在html文件中是这个局部组件的父组件,局部组件在html使用时便是这个父组件的一份子,承担数据传输的责任
跳转到父向子动态传值案例

如何进行vue组件入门
如何进行vue组件入门

再用绕口令说一波,即:title-component组件定义处与使用处,两者身份是不一样的,在定义处,它是局部组件,也是子组件,需注册才能使用;在使用处,它是根元素的包含一部分,根元素为父组件,而“它”,承担着父组件与子组件数据沟通的重任

这个总结在全局组件情况下也适用,使用该全局组件的根元素是父组件,如上面的子向父传值的案例,p#vue-app-one是父组件,<blog-post></blog-post>作为父子组件沟通的桥梁,全局组件blog-post为子组件
跳转到子向父案例

图示:
如何进行vue组件入门


如果是子组件又嵌套了子组件,被嵌套的组件是子子组件,以此类推

使用脚手架创建项目并运用组件and传值

CLI脚手架安装步骤可以看我的这篇文章。使用CLI脚手架创建项目,简单快捷,特别的是,页面内容和数据传递需要写在.vue文件里,每个vue文件为一个模块。
        我们通过合理组装各模块(组件)来完成某项具体的功能,组件之间的配合以及父子传值的作用在此处体现得更明显一些。每一个vue文件都可看作一个组件,我们可以把页面按照需求划分成若干个部分,如导航栏,中间内容和底部三个部分。每个部分的实现分散到各子组件中完成,包括页面的展示和数据的获取。

如自定义博客页面:

  • 主页面由vue-app主组件构成,包含导航栏、中间部分、底部栏三部分

  • 导航栏由vue-header子组件完成

  • 中间内容按照功能划分

    • 添加博客:addBlob子组件

    • 显示博客:showBlob子组件

    • 修改博客:modifyBlob子组件

    • 点击显示单篇博客内容:singleBlob子组件

  • 底部信息栏由vue-footer完成
    除了主页面,其他子部分和组件均根据功能划分,辅助主页面展示

个人博客父向子传值的示意图如下:

  • 各个子功能由不同组件构成,拼成一个大一些的功能组件

  • 点击展示单篇博客和修改博客两个组件均需要从主页面获取博客id,才能进行相应展示和操作,这便是典型的父向子传值
    如何进行vue组件入门

以上就是如何进行vue组件入门,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 如何进行vue组件入门

本文链接: https://www.lsjlt.com/news/302941.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何进行vue组件入门
    本篇文章给大家分享的是有关如何进行vue组件入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。初识组件应用实例化多个vue对象用new创建多个vue对象并命名,可以通过变量相互...
    99+
    2023-06-22
  • vue组件间如何进行通信
    本篇内容介绍了“vue组件间如何进行通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue是数据驱动视图更新的框架, 我们平时开发,都会把...
    99+
    2023-06-21
  • 如何进行CPack的入门
    本篇文章给大家分享的是有关如何进行CPack的入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。背景CPack 是 CMake 2.4.2 之...
    99+
    2024-04-02
  • 如何进行linux SELinux入门
    小编今天带大家了解如何进行linux  SELinux入门,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“如何进行linux...
    99+
    2023-06-28
  • Vue组件如何进行单元测试
    本篇内容介绍了“Vue组件如何进行单元测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们先来简单解释一下单元测试:就是对函数的输入输出进...
    99+
    2023-06-29
  • 如何进行SQLite快速入门
    这篇文章给大家介绍如何进行SQLite快速入门,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。SQLite基础什么是SQLiteSQLite是一款轻型的嵌入式数据库它占用资源非常的低,在...
    99+
    2024-04-02
  • 如何进行jQuery UI的入门
    如何进行jQuery UI的入门,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。jQuery ui 是基于 jquery  基础类...
    99+
    2024-04-02
  • 如何进行python快速入门
    这期内容当中小编将会给大家带来有关如何进行python快速入门,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。九九乘法表for i in range(1,10): &...
    99+
    2023-06-25
  • 如何进行Python Numpy的入门
    如何进行Python Numpy的入门,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pa...
    99+
    2023-06-02
  • vue如何实现子组件向父组件进行传值
    这篇文章主要为大家展示了“vue如何实现子组件向父组件进行传值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现子组件向父组件进行传值”这篇文章吧。子组件向父组件进行传值:父组件内设置...
    99+
    2023-06-17
  • vue如何实现父组件向子组件进行传值
    这篇文章给大家分享的是有关vue如何实现父组件向子组件进行传值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。父组件向子组件进行传值:在子组件绑定父的数据,子组件通过props接受参数。接下来我们通过一个例子,说明...
    99+
    2023-06-17
  • 如何进行web.py数据库入门
    如何进行web.py数据库入门,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。web.py是一个非常精巧的web框架,不过其自带的db模块也...
    99+
    2024-04-02
  • 如何进行DOM模型的入门
    如何进行DOM模型的入门,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。向大家描述一下DOM模型的概念,DOM是DocumentObject...
    99+
    2024-04-02
  • vue中如何引进组件
    vue中引进组件的步骤:在template中引入组件;在script的第一行用import引入路径;在component中写上组件名称。示例:在template中引入组件;export default {name: 'swiper',}sc...
    99+
    2024-04-02
  • vue组件如何引入cdn
    vue组件引入cdn的示例:index.html中添加第一个script链接:src=“https://cdn.bootcss.com/vue/2.5.10/vue.min.js”>vue_cli3架构的vue在vue.config....
    99+
    2024-04-02
  • 如何入门Vue 2.0的模块化前端UI 组件库
    这篇文章给大家介绍如何入门Vue 2.0的模块化前端UI 组件库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。AT-UI 是一款基于 Vue.js 2.0 的轻量级、模块化前端 UI ...
    99+
    2024-04-02
  • Vue.js实战入门:如何对数组和对象进行循环
    (学习视频分享:web前端开发、编程基础视频)以上就是Vue.js实战入门:如何对数组和对象进行循环的详细内容,更多请关注编程网其它相关文章!...
    99+
    2022-11-22
    Vue
  • 如何进行Promise对象的基础入门
    如何进行Promise对象的基础入门,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天来学习下Promise吧!其实这在笔试上...
    99+
    2024-04-02
  • Angular组件如何进行通信
    小编给大家分享一下Angular组件如何进行通信,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!准备一下我们的环境:1、创建一个h...
    99+
    2024-04-02
  • 怎么进行DOM入门
    怎么进行DOM入门,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。这里向大家简单介绍一下DOM的概念,当浏览器支持JavaScr...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作