使用Vue脚手架2

news2024/11/25 16:40:41

ref属性

src/components/SchoolName.vue

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

<script>
    export default {
        name:'SchoolName',
        data() {
            return {
                name:'黑马',
                address:'广州'
            }
        },
    }
</script>

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

 src/App.vue

<template>
    <div>
        <h1 v-text="msg" ref="title"></h1>
        <button ref="btn" @click="showDOM">点我输出上方的DOM元素</button>
        <SchoolName ref="sch"/>
    </div>
</template>

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

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

 

props配置项

src/App.vue

<template>
    <div>
        <StudentName name="李四" sex="女" /><hr/>
        <StudentName name="王五" sex="男" :age="18"/><hr/>
    </div>
</template>

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

export default {
    name: 'App',
    components: { StudentName }
    
}
</script>

src/components/StudentName.vue

<template>
    <div>
        <h1>{{ msg }}</h1>
        <h2>学生姓名:{{ name }}</h2>
        <h2>学生性别:{{ sex }}</h2>
        <h2>学生年龄:{{ myAge+1 }}</h2>
        <button @click="updateAge">尝试修改到的年龄</button>
    </div>
</template>

<script>
export default {
    name: 'StudentName',
    data() {
        return {
            msg: '我是一个尚硅谷的学生',
            myAge: this.age
        }
    },
    methods:{
        updateAge(){
            this.myAge++;
        }
    },
    // 1.简单声明接收
    // props:[
    //     'name','sex','age'
    // ]

    // 2.接收的同时对数据类型进行限制
    // props: {
    //     name: String,
    //     sex: String,
    //     age: Number
    // }

    // 3.接收的同时:进行类型限制+默认值的指定+必要性的限制
    props: {
        name: {
            type: String,
            required: true,
        },
        sex: {
            type: String,
            required: true,
        },
        age: {
            type: Number,
            default: 99,
        }
    }
}
</script>

 

注意:当props中与当前组件配置同名时,props中的配置优先级高于当前组件 

mixin混入

1.组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”,在发生冲突时以组件优先

var mixin={
    data:function(){
        return{
            message:'hello',
            foo:'abc
        }
    }
}

new Vue({
    mixins:[mixin],
    data(){
        return{
            message:'goodbye',
            bar:'def'
        }
    },
    created(){
        console.log(this.$data)
        // =>{message:"ggodbye",foo:"abc",bar:"def"}
    }

})

 2.同名生命周期函数将合并为一个数组,都会被调用。另外,混入对象的生命周期函数将在自身生命周期函数之前调用

var mixin={
    created(){
        console.log('混入对象的钩子被调用')
    }
}

new Vue({
    mixins:[mixin],
    created(){
        console.log('组件钩子被调用')
    }
})

// =>"混入对象的钩子被调用"
// =>"组件钩子被调用"

src/mixin.js

export const hunhe={
    methods:{
        showName(){
            alert(this.name);
        }
    },
    mounted(){
        console.log('你好啊');
    }
}

export const hunhe2={
    data(){
        return {
            x:100,
            y:200
        }
    }
}

src/components/School.vue

<template>
    <div>
        <h2 @click="showName">学校名称:{{ name }}</h2>
        <h2>学校地址:{{ address }}</h2>
    </div>
</template>

<script>
import {hunhe,hunhe2} from '../mixin'
export default {
    name: 'School',
    data() {
        return {
            name:'黑马',
            address:'广州',
            x:666
        }
    },
    mixins:[hunhe,hunhe2]//局部混入
}
</script>

src/components/Student.vue

<template>
    <div>
        <h2 @click="showName">学生姓名:{{ name }}</h2>
        <h2>学生性别:{{ sex }}</h2>
    </div>
</template>

<script>
import {hunhe,hunhe2} from '../mixin'
export default {
    name: 'Student',
    data() {
        return {
            name:'张三',
            sex:'男'
        }
    },
    mixins:[hunhe,hunhe2]//局部混入
}
</script>

src/App.vue

<template>
    <div>
        <Student/>
        <hr/>
        <School/>
    </div>
</template>

<script>
import Student from './components/Student'
import School from './components/School'

export default {
    name: 'App',
    components: { Student,School }
    
}
</script>

src/main.js

import Vue from 'vue'
import App from './App.vue'
import { hunhe } from './mixin'

// import {mixin} from './mixin'
Vue.config.productionTip = false

// Vue.mixin(hunhe)  //全局混合引入
// Vue.mixin(hunhe2) //全局混合引入
new Vue({
    el: '#app',
    render: h => h(App)
})

plugin插件

 

src/plugins.js 

export default {
    install(Vue,x,y,z){
        console.log(x,y,z)
        // 全局过滤器
        Vue.filter('mySlice',function(value){
            return value.slice(0,4)
        })


        // 定义全局指令
        Vue.directive('fbind',{
            // 指令与元素成功绑定时
            bind(element,binding){
                element.value=binding.value
            },
            // 指令所在元素被插入页面时
            inserted(element,binding){
                element.focus()
            },
            // 指令所在的模板被重新解析时
            update(element,binding){
                element.value=binding.value
            }
        })

        // 定义混入
        Vue.mixin({
            data(){
                return{
                    x:100,
                    y:200
                }
            }
        })

        // 给Vue原型上添加一个方法(vm和vc都能用
        Vue.prototype.hello=()=>{
            alert('你好啊')
        }
    }
}

src/main.js

import Vue from 'vue'
import App from './App.vue'

import plugins from './plugins.js'
Vue.config.productionTip = false

//应用插件
Vue.use(plugins,1,2,3)
//创建vm
new Vue({
    el: '#app',
    render: h => h(App)
})

src/components/School.vue

<template>
    <div>
        <h2>学校名称:{{ name|mySlice }}</h2>
        <h2>学校地址:{{ address }}</h2>
        <button @click="test">点我测试一个hello方法</button>
    </div>
</template>

<script>
export default {
    name: 'School',
    data() {
        return {
            name:'黑马',
            address:'广州'
        }
    },
    methods:{
        test(){
            this.hello()
        }
    }
}
</script>

src/components/Student.vue

<template>
    <div>
        <h2>学生姓名:{{ name }}</h2>
        <h2>学生性别:{{ sex }}</h2>
        <input type="text" v-bind:value="name"/>
    </div>
</template>

<script>
export default {
    name: 'Student',
    data() {
        return {
            name:'张三',
            sex:'男'
        }
    }
}
</script>

src/App.vue

<template>
    <div>
        <Student/>
        <hr/>
        <School/>
    </div>
</template>

<script>
import Student from './components/Student'
import School from './components/School'

export default {
    name: 'App',
    components: { Student,School }
    
}
</script>

scoped样式

查看版本npm view webpack versions

src/components/Student.vue

<template>
    <div class="demo">
        <h2 class="title">学生姓名:{{ name }}</h2>
        <h2 class="atguigu">学生性别:{{ sex }}</h2>
    </div>
</template>

<script>
export default {
    name: 'Student',
    data() {
        return {
            name:'张三',
            sex:'男'
        }
    }
}
</script>

<style lang="less">
    .demo{
        background-color: pink;
        .atguigu{
            font-size: 40px;
        }
    }
</style>

src/components/School.vue

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

<script>
export default {
    name: 'School',
    data() {
        return {
            name:'黑马',
            address:'广州'
        }
    }
}
</script>

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

src/App.vue

<template>
    <div>
        <h1 class="title">你好啊</h1>
        <Student/>
        <School/>
    </div>
</template>

<script>
import Student from './components/Student'
import School from './components/School'

export default {
    name: 'App',
    components: { Student,School }
}
</script>

<style scoped>
    .title{
        background-color: red;
    }
</style>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++修炼之路】31.异常

每一个不曾起舞的日子都是对生命的辜负 异常 一.C语言传统的处理错误的方式二.C异常概念三.异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范 四.自定义异常体系五.C标准库的异常体系六.异常的优缺点 一.C语言传统的处理错误的方式 传统的错误处理机…

Idea运行springboot项目(保姆级教学)

**大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯…

PHP:对比数据库,隐藏不满足条件的标签;对比数据库,将标签中的内容更改为数据库中的对应项

一、查询数据库数据&#xff0c;A列数据如果等于前端div中的值&#xff0c;那么将div中的值给其赋值为对应数据库中B列的值 如下案例&#xff1a;以第一个为例&#xff0c;如果id为append1&#xff0c;并且此id等于满足条件的数据库中colum_name列中的append1&#xff0c;就将…

Windows安装 PostgreSQL数据库并进行简单数据操作

介绍&#xff1a; 在开发和管理数据库应用程序时&#xff0c;选择合适的数据库管理系统是至关重要的。PostgreSQL 是一个强大且广受欢迎的开源关系型数据库管理系统&#xff0c;它具有稳定性、可靠性和丰富的功能。本文将介绍如何在 Windows 操作系统上下载、安装 PostgreSQL&a…

6. QT环境下使用OPenCV(利用鼠标实现图像的ROI区域选择)

1. 说明 一张图像显示的内容可能并非所有的都是有用信息,有时需要选定某些区域做出特殊的处理。在OPenCV当中可以在图像上响应鼠标的操作,选取出图像上的特殊区域 — ROI区域。 效果展示: 2. 实现步骤 首先在QtCreator中创建一个新的widget项目,并配置好OPenCV的开发环…

【GIS】Python多线程转换NC格式文件为TIFF

汇总 【GIS】使用cdsapi下载ERA5和ERA5_land逐小时数据 NC格式介绍 说明 NC文件读取使用netCDF4,NC文件转换为TIF使用rasterio或者GDAL。 一些细节: 格点数据转换为TIFF文件时候,计算六参数时候,应该要考虑,格点数据存储的坐标属于栅格中心点的位置,转换为TIFF时候,…

Vue3中使用async-validator进行表单校验

官方文档&#xff1a;mirrors / yiminghe / async-validator GitCodevalidate form asynchronous &#x1f680; Github 镜像仓库 &#x1f680; 源项目地址 ⬇https://gitcode.net/mirrors/yiminghe/async-validator?utm_sourcecsdn_github_accelerator 注意&#xff1a;当…

19 | 为什么我只查一行的语句,也执行这么慢?

以下内容出自 《MySQL 实战 45 讲》 19 | 为什么我只查一行的语句&#xff0c;也执行这么慢&#xff1f; 第一类&#xff1a;查询长时间不返回 mysql> select * from t where id1;一般碰到这种情况。大概率是表 t 被锁住了。 分析&#xff1a; 首先执行 show processlis…

2023年全球性别差距调研 | 真正的“性别平等”如何实现?

尽管在推进性别平等方面做出了努力&#xff0c;但女性在许多方面仍然落后于男性--从房屋所有权到劳动力参与和董事会占比。虽然新冠疫情带来了前所未有的促进性别平等的政策&#xff0c;但它对结构性变化的影响却很小。 实际上&#xff0c;世界经济论坛估计还需要132年才能消除…

Luogu P1140.数的划分

P1140 数的划分 原题点这里 思路 这是一道动态规划的题目。 步骤主要分 5 5 5 步&#xff1a; 状态的定义转移式的推到递推顺序的判定边界的确定结果的输出 下面&#xff0c;我们针对这道题&#xff0c;细细地讲解一下每一个步骤 一、状态的定义 这道题的状态最简单&a…

面试题分析:统计网站访问次数

难度&#xff1a;较低 平台的访问量非常高&#xff0c;需要实时统计网站的访问次数&#xff0c;请设计一个计数器解决&#xff1a;初级工程师&#xff0c;可能回答使用synchronized锁或重入锁&#xff0c;进一步探讨&#xff0c;synchronized锁太重&#xff0c;有没其他方式&a…

redisson中Semaphore的信号量介绍及其原理

目录 1 基本介绍 1.1API介绍 1.2 示例 2 源码解析 2.1 Semaphore设置许可数量&#xff08;trySetPermits(int permits)&#xff09; 2.2 尝试获取许可&#xff08;boolean tryAcquire()&#xff09; 3 Lua脚本 3.1 加锁lua脚本 3.2 解锁lua脚本 1 基本介绍 Semaphore通…

科技资讯|苹果Vision Pro新专利曝光,与消除晕动症的技术有关

欧洲专利局发布了一份苹果专利&#xff0c;与消除 Apple Vision Pro 晕动病背后的一些工作有关。苹果通过推出新的 R1 处理器实现了这一目标&#xff0c;苹果专利提供了处理器背后的一些详细技术信息&#xff0c;在第 86 号专利点指出&#xff1a;" 在某些实施方案中&…

驾驭计算机视觉的翅膀:论文找代码的几种必杀技!

摘要 对于CVer来说&#xff0c;「代码和找代码」能力都是一种很重要的能力&#xff0c;毕竟idea再好只有通过代码实现出来才能发文章和刷榜。当我们阅读一篇高质量或者英文论文时&#xff0c;如何去找到该文章实现的代码&#xff0c;进而结合文章内容和代码实现去更好的理解作…

PoseiSwap 更新第二期空投,持有 Zepoch 节点数量将决定空投回报

Nautilus Chain 是行业内首个模块化 Layer3 架构链&#xff0c;开发者能够基于模块化进行定制化开发&#xff0c;并有望进一步推动 Web3 应用向隐私、合规等方向发展。当然&#xff0c;Nautilus Chain 的特殊之处还在于为生态用户带来丰厚的空投预期&#xff0c;据悉上线 Nauti…

基于matlab使用标记增强技术将虚拟内容呈现到现实场景中(附源码)

一、前言 此示例演示如何使用基于标记的增强现实将虚拟内容呈现到场景中。 增强现实 &#xff08;AR&#xff09; 通过自然混合真实和虚拟内容来增强现实世界的场景&#xff0c;从而创建新颖的应用程序。例如&#xff0c;增强现实应用程序可以添加虚拟标尺&#xff0c;使用户…

如何正确使用 ThreadLocal

1 前言 当多线程访问共享且可变的数据时&#xff0c;涉及到线程间同步的问题&#xff0c;并不是所有时候&#xff0c;都要用到共享数据&#xff0c;所以就需要ThreadLocal出场了。 ThreadLocal又称线程本地变量&#xff0c;使用其能够将数据封闭在各自的线程中&#xff0c;每…

数据管理成熟度评估DCMM之生产企业数据战略管理办法

生产企业数据战略管理办法 第一部分&#xff1a;导言 随着信息技术的快速发展和数据规模的急剧增长&#xff0c;生产企业越来越重视数据的价值和管理。有效的数据战略管理办法可以帮助生产企业更好地管理和利用数据资源&#xff0c;提高运营效率、决策质量和创新能力。本文将…

SpringMVC数据传递总结

文章目录 1. 分析总结2. 普通格式数据2.1 普通参数2.2 pojo参数2.3 嵌套pojo参数2.4 数组 -- 普通参数2.5 集合 -- 普通参数2.6 web容器添加过滤器指定字符集 3. JSON格式数据3.1 相关准备3.2 json数组(基本)3.3 json对象(pojo)3.4 json数组(pojo) 1. 分析总结 1.1 普通格式数据…

K8S平台安全框架

平台安全框架 1 平台安全框架1.1 安全框架1.1.1 认证框架1.1.2 框架解读 1.2 认证实践1.2.1 令牌用户1.2.2 证书用户 1.3 授权实践1.3.1 集群用户1.3.2 角色基础1.3.3 授权基础1.3.4 用户组实践1.3.5 SA授权1.3.6 SA秘钥 1.4 准入实践1.4.1 准入基础1.4.2 优先调度1.4.3 资源配…