vue学习-03vue父子组件与ref属性

2023-09-18 20:27:42

本篇开始,我们将复习一下上篇的组件引入:
App.vue

<template>
    <div>
        <img src="./assets/logo.png" alt="logo">
        <!-- 编写组件标签 -->
        <School></School>
        <Student></Student>
    </div>
</template>

<script>
    //引入组件。语法:import 组件名 from '组件的路径'
    import School from './components/School.vue'
    import Student from './components/Student.vue'

    //暴露App(父)组件
    export default {
        name: 'App',
        //注册子组件
        components:{
            School,
            Student
        }
    }
</script>

components/
School.vue

<template>
    <div class="demo">
        <h2>学校名称:{{schoolName}}</h2>
        <h2>学校地址:{{address}}</h2>
        <button @click="showName">点击我提示学校名</button>
    </div>
</template>

<script>
    export default {//将组件暴露出去(一般我们都是用默认暴露)
        name:'School',//在开发者工具呈现出的组件名
        data() {
            return {
                schoolName:'罗小黑',
                address:'湖南衡阳'
            }
        },
        methods: {
            showName() {
                alert(this.schoolName);
            }
        }
    };
    //export default school;//定义好的组件要想被别人调用,一定要将其暴露出来!!!!
</script>

<style>
    .demo{
        background-color: orange;
    }
</style>

Student.vue

//组件的结构
<template>
    <div class="demo2">
        <h2>学生名字:{{studentName}}</h2>
        <h2>学生年龄:{{age}}</h2>
        <button @click="showName">点击我提示学生名字</button>
    </div>
</template>

<script>
    export default {//将组件暴露出去(一般我们都是用默认暴露)
        name:'Student',//在开发者工具呈现出的组件名
        data() {
            return {
                studentName:'张三',
                age:18
            }
        },
        methods: {
            showName() {
                alert(this.studentName);
            }
        }
    };
    //export default school;//定义好的组件要想被别人调用,一定要将其暴露出来!!!!
</script>

<style>
    .demo2{
        background-color: skyblue;
    }
</style>

main.js

/**
 * 该文件为整个项目的入口文件
 */
//引入vue
import Vue from 'vue'
//引入App组件,它是所有组件的父组件
import App from './App.vue'

//关闭vue的生产提示
Vue.config.productionTip = false

//创建vue实例对象vm


/**
 * 关于不同版本的Vue:
 *      1.vue.js和vue.runtime.xxx.js的区别:
 *          (1).vue.js是完整版的Vue,包含:核心功能+模板解析器。
 *          (2).vue.runtime.xxx.js是运行版的Vue,只包含:核心功能;没有模板解析器。
 *      2.因为vue.runtime.xxx.js没任何模板解析器,所以不能使用template配置项,需要使用render函数接收到的createElement函数去指定具体内容。
 */
new Vue({
    el:'#app',
    //下面这段代码一会解释,完成这个功能:将App组件放入到容器中
    //render: h => h(App),箭头函数
    /**
     * render是一个函数,必须要有返回值
     */
    //创建并渲染元素
    render(createElement) {
        return createElement(App);
    },
});

// eslint-disable-next-line no-unused-vars
let person={name:'张三',age:18};

ref属性

main.js

//引入Vue
import Vue from 'vue';

//引入App
import App from './App.vue';

//关闭Vue的生产提示信息
Vue.config.productionTip=false;

//创建vm实例对象
const vm = new Vue({
    el:'#app',
    render: h => h(App)//渲染容器
});

App.vue,将最上边的App.vue调整为以下内容

<template>
    <div>
        <h2 v-text="msg" ref="title"></h2>
        <!-- 编写组件标签 -->
        <School ref="sch"></School>

        <!-- 编写组件标签 -->
        <Student></Student>
        <button ref="btn" @click="showDOM">点击我输出上面的DOM元素</button>
    </div>
</template>

<script>
    //引入School组件
    import School from './components/School.vue'

    //引入Student组件
    import Student from './components/Student.vue'
    export default {
        name: 'App',
        //注册组件
        components:{
            School,
            Student
        },
        data() {
            return {
                msg:'欢迎学习Vue!'
            }
        },
        methods:{
            showDOM(){
                console.log(this);
                console.log(this.$refs.title);//真实的DOM元素
                console.log(this.$refs.sch);//真实的DOM元素
                console.log(this.$refs.btn);//School组件的实例对象(vc)
            }
        }
    }
</script>

<style>

</style>

school.vue

<template>
  <div class="demo">
      <h2>学校名字:{{name}}</h2>
      <h2>学校地址:{{address}}</h2>
  </div>
</template>

<script>
    //以默认的形式暴露组件
    export default {
        name:'School',
        data() {
            return {
                name:'罗小黑',
                address:'湖南衡阳'
            }
        }
    }
</script>

<style>
    .demo{
        background-color: skyblue;
    }
</style>

student.vue

<template>
    <div class="demo2">
        <h2>学生姓名:{{name}}</h2>
        <h2>年龄:{{age}}</h2>
    </div>
</template>

<script>
    //暴露组件(默认暴露形式)
    export default {
        name:'Student',
        data() {
            return {
                name:'张三',
                age:18
            }
        }
    }
</script>
<style>
    .demo2{
        background-color: orange;
    }
</style>
更多推荐

【unity小技巧】Unity 存储存档保存——PlayerPrefs、JsonUtility和MySQL数据库的使用

文章目录前言PlayerPrefs一、基本介绍二、Demo三、优缺点JsonUtility一、基本使用二、Demo三、优缺点Mysql(扩展)完结前言游戏存档不言而喻,是游戏设计中的重要元素,可以提高游戏的可玩性,为玩家提供更多的自由和控制权。看完这篇文章就可以构建属于自己的存储系统了。PlayerPrefs它是一个仅

【Spring】数据导出为Excel的接口报java.io.IOException: UT010029: Stream is closed错误

数据导出为Excel的接口报java.io.IOException:UT010029:Streamisclosed错误实习时导师让写一个平台信息导出为Excel的功能,写完之后发现文件正常导出,但控制台一直报Streamisclosed错误。在网上找了大半天,都说是使用OutputStream时关闭了流导致的,这也确实

使用git-repo管理多个git仓库

step1:下载repogit-repo下载可在服务器端通过以下任一方式下载。gitclonehttps://gerrit.googlesource.com/git-repo(谷歌官方源)gitclonehttps://mirrors.tuna.tsinghua.edu.cn/git/git-repo(国内清华源)gi

JS模块化

JS模块化什么是模块化?将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起。块的内部数据/实现是私有的,只是向外部暴露一些接口(方法)与外部其它模板通信。把所有的js代码写在一起,功能点不明确,耦合度不够,很难维护。模块化的优点避免命名冲突,减少命名空间污染更好的分离,按需加载更高复用性高可维

PgSQL-向量数据库插件-lantern

PgSQL-向量数据库插件-lantern即pgvector、pg_embedding后又一向量数据库扩展Lantern问世了。当然也为向量列提供了hnsw索引以加速ORDERBY...LIMIT查询。Lantern使用usearch实现hnsw。使用方法保留了标准PgSQL接口,兼容其生态工具。首先需要安装该插件:C

【Redis7】--4.事务、管道、发布和订阅

文章目录事务1.Redis事务2.Redis事务特性3.Redis事务命令3.1MULTI3.2EXEC3.3DISCARD3.4WATCH3.5UNWATCH4.不保证原子性4.1"全体连坐"4.2"冤头债主"5.事务执行流程管道1.pipeline的使用2.pipeline小总结发布和订阅1.常用命令1.1SUBS

LVGL移植win端模拟显示流畅解决方案-使用 SquareLine 生成前端 UI 文件

lvgl_port_win_vscode在win平台对lvgl方便的进行模拟显示,程序文件结构清晰,lvglwithSDL2,cmake构建,VsCode一键运行,使用SquareLine生成前端UI文件,win上直接跑。相比官方的lvgl移植到win端的几种方法SimulatoronPC—LVGLdocumentat

【STM32】WWDG—窗口看门狗

在一个设定好的区间进行喂狗与独立看门狗不同的是,独立看门狗只需要在计时到0之前喂狗。而窗口看门狗需要在设定好的区间内进行喂狗,否则进行reset。下限递减计数器不断的往下递减计数,当减到一个固定值0X40时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。上限是窗口看门狗的计数器的值在减到某一个数之前喂

人工智能安全-6-SQL注入检测

0提纲概述SQL注入方法SQL注入的检测方法SQL语句的特征提取天池AI上的实践1概述SQLIA:SQLinjectionattackSQL注入攻击是一个简单且被广泛理解的技术,它把SQL查询片段插入到GET或POST参数里提交到网络应用。由于SQL数据库在Web应用中的普遍性,使得SQL攻击在很多网站上都可以进行。并

AIGC(生成式AI)试用 6 -- 从简单到复杂

从简单到复杂,这样的一个用例该如何设计?之前浅尝试用,每次尝试也都是由浅至深、由简单到复杂。一点点的“喂”给生成式AI主题,以测试和验证生成式AI的反馈。AIGC(生成式AI)试用1--基本文本_Rolei_zl的博客-CSDN博客AIGC(生成式AI)试用2--胡言乱语_Rolei_zl的博客-CSDN博客AIGC(

测试域: 流量回放-工具篇jvm-sandbox,jvm-sandbox-repeater,gs-rest-service

JVM-SandboxJvm-Sandbox-Repeater架构_小小平不平凡的博客-CSDN博客https://www.cnblogs.com/hong-fithing/p/16222644.html流量回放框架jvm-sandbox-repeater的实践_做人,最重要的就是开心嘛的博客-CSDN博客[jvm-s

热文推荐