首页 > 其他分享 >Vue学习四:组件的三大组成部分、组件通信和进阶语法

Vue学习四:组件的三大组成部分、组件通信和进阶语法

时间:2023-09-14 16:16:50浏览次数:58  
标签:Vue 进阶 样式 prop props 组件 hobby data

一、组件的三大组成部分

<template>

里面只能有一个根元素

<style>

全局样式(默认):影响所有组件
局部样式: scoped 下样式,只作用于当前组件

<script>

el根实例独有, data是一个函数,其他配置项一致

二、scoped设置局部样式

默认情况:写在组件中的样式会全局生效→因此很容易造成多个组件之间的样式冲突问题。
1.全局样式:默认组件中的样式会作用到全局
2.局部样式:可以给组件加上scoped属性,可以让样式只作用于当前组件
scoped原理?
1.当前组件内标签都被添加data-v-hash值的属性
2. css选择器都被添加[data-v-hash值]的属性选择器
最终效果:必须是当前组件的元素,才会有这个自定义属性,才会被这个样式作用到

三、data函数

一个组件的data选项必须是一个函数。→保证每个组件实例,维护独立的一份数据对象。
每次创建新的组件实例,都会新执行一次data函数,得到一个新对象。

组件内提供数据的是data函数,每个组件实例都会开辟新的一个空间存储这个数据,组件实例之间互不影响,也就是说data数据作用域只在组件实例范围内。

四、组件通信

组件关系:父子关系使用props&$emit

父传子props:
①父中给子添加属性传值②子props接收③使用
子传父$emit:
①子$emit发送消息②父中给子添加消息监听③父中实现处理函数

案例如下:父组件中有个数据myTitle传给子组件,子组件将数据接受并展示到页面上;子组件上加个按钮,按钮加个点击事件,点了以后会将通知和一个myTitle的新值传给父组件,父组件监听到通知后将myTitle更新。因为使用v-bind动态传递数据,父组件中数据更新,单向数据流,子组件接受的数据也更新并展示。

父组件代码

<template>
    <div class="App">
        父组件
        <AlongHeader :title="myTitle" :hobby="hobby" @newTitle="newTitleFn"></AlongHeader>
    </div>
</template>

<script>
    import AlongHeader from './components/AlongHeader.vue'
    export default{
        components:{
            AlongHeader,
        },
        data(){
            return {
                myTitle:'阿龙学前端',
                hobby:['唱','跳','rap','篮球']
            }
        },
        methods:{
            newTitleFn(newValue){
                this.myTitle = newValue
            }
        }
    }
</script>

<style>
    .App{
        border: 2px solid black;
        margin: 10px;
    }
</style>
View Code

子组件代码

<template>
    <div class="AlongHeader">
        子组件 {{title}}
        <button @click="changeTitle"></button>
        <p>{{hobby[0]}}、{{hobby[1]}}、{{hobby[2]}}、{{hobby[3]}}</p>
    </div>
</template>
、
<script>
    export default{
        props:['title','hobby'],
        methods:{
            changeTitle(){
                this.$emit('newTitle','好好学习')
            }
        }
    }
</script>

<style scoped>
    .AlongHeader{
        border: 1px solid black;
        margin: 10px;
    }
</style>
View Code

prop

Prop定义:组件上注册的一些 自定义属性(结合v-bind成为动态属性)
Prop作用:向子组件传递数据
特点:
●可以传递任意数量的prop
●可以传递任意类型的prop

props校验

作用:为组件的prop指定验证要求,不符合要求,控制台就会有错误提示→帮助开发者,快速发现错误

语法

props:{
    校验的属性名:{
        type:类型,
        required:true,//是否必填
        default:默认值,
        validator(){
            //自定义校验逻辑
            return 是否通过校验
        }
    }
}

prop & data.单向数据流
共同点:都可以给组件提供数据。
区别:
●data 的数据是自己的→随便改
●prop 的数据是外部的→不能直接改, 要遵循单向数据流
单向数据流:父级prop的数据更新,会向下流动,影响子组件。这个数据流动是单向的。

标签:Vue,进阶,样式,prop,props,组件,hobby,data
From: https://www.cnblogs.com/panglinglong/p/17702513.html

相关文章

  • vue 数学公式js加载
    <script>document.addEventListener("DOMContentLoaded",function(){renderMathInElement(document.body,{//customisedoptions//•auto-renderspecifickeys,e.g.:delimiters:[{left:'$......
  • Java进阶学习之Java架构师的学习路线
    Java架构师,首先要是一个高级Java攻城狮,熟练使用各种框架,并知道它们实现的原理。Java架构师的作用就是要满足业务需求,用低的硬件网络成本和技术维护成本。Java架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做......
  • vue-day01
    前端介绍1HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看2Ajax的出现->后台发送异步请求,Render+Ajax混合3单用Ajax(加载数据,DOM渲染页面):前......
  • vue3项目 基于vuedraggable插件实现拖拽上下移动
    //父页面<template><divclass="main_body"><blockTitletitle="事件详情"/><a-formref="formRef":model="formValue"style="width:100%"class="form_bo......
  • 项目开发中难点-项目使用v-if控制表单/元素/组件显示隐藏,例如调用接口后赋值需重新加
    项目中使用v-if="show"  控制组件的显示或隐藏,当接口返回后this.show=false,进行赋值,后this.show=true显示 。但是页面没有正常显示,此时使用this.$nextTick。 一、$nextTick()概述1.$nextTick()原理$nextTick()是Vue.js框架中的一个方法,它主要用于DOM操作......
  • 从零开始使用vue2+element搭建后台管理系统(实现按钮权限控制)
    思路:登录后请求用户信息接口,后端返回用户信息中包括权限数组,数据格式belike: 前端对用户信息进行存储(对没错又是假接口)://获取用户信息asyncgetUserInfo(mobile){try{this.loading=true;constres=awaitgetInfo(mobile);......
  • vue特性
    1.组件的模块化开发1.1组件注册局部首先在创建一个vue页面作为组件,这里就以分页组件来演示:<!--分页展示--><el-paginationbackgroundstyle="margin:50pxauto"@size-change="handleSizeChange"@current-c......
  • app直播源码,Vue 禁止输入框输入空格
    app直播源码,Vue禁止输入框输入空格 <template> <div>  <input   type="text"   v-model="text"   @input="(e)=>text=e.target.value.replace(/\s/g,'')"  > </div></template><scri......
  • 百度 Web Uploader 文件批量上传组件
    WebUploader是由BaiduWebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS6+,android4+。两套运行时,同样的调用方式,可供用户任意选用。采用大文件......
  • 万字长文带你全面掌握Vue3
    在2020年9月19日,vue更新了3.0的正式版,不知不觉,已经过去了好几个月了,作为一位前端切图仔,是时候开始学习了,每次抱着准备学、再等等、明天说的想法,成功在发布了两个多月的时候来认真学习了一波,这里来总结一下vue3到底有哪些更新,来帮各位没有时间去了解vue3的朋友来一次快速入门。如何......