Vue(六) render函数、Vue.config.js配置文件,ref属性,props配置项、mixin混入、插件、scoped

news2024/9/21 10:52:01

文章目录

  • 一、render函数
  • 二、Vue.config.js配置文件
  • 三. ref属性
  • 四. props配置项
  • 五. mixin混入
    • 1. 局部混入
    • 2. 全局混入
  • 六. 插件
  • 七. scoped

一、render函数

在main.js文件中,采用了render函数。

import App from './App.vue'
 new Vue({
   // 这句代码的意思是将App组件放入容器中
   render: h => h(App),
 }).$mount('#app') // 挂载容器

印象中,若采用之前template配置项的方式,写法是这样:

import Vue from 'vue'
// 引入App组件
import App from './App.vue'
// 关掉Vue的生产提示
Vue.config.productionTip = false

// App组件引入、注册且正确使用
new Vue({
  el: '#app',
  template: `<App></App>`,
  components: { App }
})

报错,且提供了两种解决方案
在这里插入图片描述
原因是生成的项目默认导入的是运行版的vue(vue.runtime.esm.js)。比完整版的vue少了模板解析器。
在这里插入图片描述

解决方法:导入完整版的vue或者采用render函数

  • 引入完整版vue
import Vue from 'vue/dist/vue.js'
  • render函数
new Vue({
  el: '#app',
  // render是个函数,vue负责调用这个函数。
  // 调用render函数时,传递了createElement函数,该函数可以创建具体元素
  // 所以template行不通,render同样可以实现这样的功能。
  render (createElement) {
    console.log(createElement);
    return createElement('h1', 'hello')
  }
  // 简写为箭头函数,
  // render: h => h(App),
})

在这里插入图片描述
为什么不用完整版的vue:
在vue.js文件中,模板解析器的代码量约占vue.js的三分之一;webpack打包后,代码已经变成浏览器认识的js等内容,此时模板解析器没有什么作用了,也不应该再参与打包了。不打包模板解析器也能节省一点空间,让打包出来的文件小一点。所以采用精简版的vue。

总结:

  1. vue.js与vue.runtime.xxx.js的区别
    1. vue.js是完整版的js,包含核心功能+模板解析器
    2. vue.runtime.xxx.js,只包含核心功能,没有模板解析器,所以不能使用template配置项,需要render函数接收createElement函数去指定具体的内容

二、Vue.config.js配置文件

这个文件用来修改一些默认配置,比如项目入口的文件名不再使用main.js,改为peiqi.js; 执行命令:

vue inspect > output.js

生成ouput.js文件,默认配置都在该文件内
在这里插入图片描述
具体可以修改哪些配置,查看官网说明:https://cli.vuejs.org/zh/config/
在这里插入图片描述

三. ref属性

给元素添加ref属性,可用来获取DOM节点

  • 打标识<h1 ref="xxx">...</h1>
  • 获取this.$refs.xxx

应用在html元素中,获取到的是真实DOM元素(相当于定义id属性,document.getElementById…)。
应用在组件标签上是组件实例对象(vc)

<template>
  <div>
    <!-- html元素 -->
    <h1 ref="title">欢迎学习</h1>
    <button @click="showInfo" ref="btn">点击显示节点信息</button>
    <!-- 组件 -->
    <School ref="sch"></School>
  </div>
</template>
<script>
    ...
  methods: {
    showInfo () {
      console.log(this.$refs);
    }
  }
</script>

在这里插入图片描述

四. props配置项

propos配置:可实现组件传值。

传值:

//APP组件给子组件School传值
<template>
  <div>
   <!--传递的值都是string类型,若要传数字型,则用v-bind绑定属性`:age=xxx`,xxx里是js表达式,则age转为数字型-->
    <Student name="张三" gender="" :age="18"></Student>
  </div>
</template>

接收值:

// School.vue接收值
<template>
  <div>
    <h2>学生年龄:{{ stuAge }}</h2>
    <h2>学生姓名:{{ stuName }}</h2>
    <button @click="stuAge++">点击+1</button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      msg: '学生信息',
      // 定义变量来接收props值,
      stuName: this.name,
      stuAge: this.age
    }
  },
  // 接收
  props: ['name', 'age'],
</script>

注:propos接收的值不能修改,若要修改则需在data中定义变量接收这个值,然后再修改

propos配置:组件接收外部来的数据,有三种接收方式

  1. 只接收:props: ['name', 'age', 'gender']
  2. 限制类型:props: {name: String,...}
  3. 限制类型、限制必要性、指定默认值
 props: {
    name: {
      type: String,
      required: true,
      default: 99
    }
  }

五. mixin混入

minxin就是把多个组件中一样的配置提取出来,形成一个对象。使用的时候导入即可,无需再写这个配置。

1. 局部混入

1、在src包下创建一个mixin.js文件,写入配置对象

// src/mixin.js
export const hunhe = {
  methods: {
    showInfo () {
      alert(this.name)
    }
  }
}
export const hunhe2 = {
  data () {
    return {
      x: 200,
      y: 600
    }
  },
  mounted () {
    console.log('加载');
  }
}

2、在组件中混入并配置好

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

<script>
import { hunhe, hunhe2 } from '../mixin.js'
export default {
  data () {
    return {
      name: '窗户学院',
      address: '魔法堡',
      x: 1
    }
  },
  mounted () {
    console.log('School组件挂载完毕');
  },
  mixins: [hunhe, hunhe2]
}
</script>

点击学校名称,触发事件
在这里插入图片描述
如果组件内的配置项与maxin内的配置项(与methods里的方法重名,或与data里的属性充满)有冲突,则以组件内的为准,(生命周期函数除外)

School组件里的x还是1,但是多了个y值
在这里插入图片描述
生命周期函数:
在这里插入图片描述

2. 全局混入

在main.js中混入,这种方式会给所有组件都混入mixin的配置

import { hunhe, hunhe2 } from './mixin.js'
Vue.mixin(hunhe)
Vue.mixin(hunhe2)

所有组件都有了x和y属性
在这里插入图片描述

六. 插件

插件的本质是一个对象,且必须包含install方法。install的第一个参数是vue,第二个以后的参数是插件使用者传递的数据。

  • 定义插件:

创建文件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('big', (element, binding) => {
      element.innerText = binding.value * 10
    })

    // 定义混入
   Vue.mixin({
     methods: {
       showInfo () {
         alert(this.name)
       }
     }
   })
    // 给Vue原型添加一个方法
    Vue.prototype.hello = () => { alert('hello') }
  }
}
  • 引入并应用插件:

main.js

// 引入插件
import plugins from './plugins'
// 使用插件
Vue.use(plugins, 1, 2, 3)

在这里插入图片描述

七. scoped

作用是让样式在当前组件生效,防止冲突。

编码时,所有组件内的style样式会汇总到一起,所以选择器可能会发生冲突

比如目前有两个组件school和student,添加背景色

School.vue:

<template>
  <div class="demo">
    <h2>学校名称:{{ name }}</h2>
    <h2>学校地址:{{ address }}</h2>
  </div>
</template>
<style>
.demo {
  background-color: orange;
}
</style>

Student.vue

<template>
  <div class="demo">
    <h2>学生姓名:{{ name }}</h2>
    <h2>学生年龄:{{ age }}</h2>
  </div>
</template>
<style>
.demo {
  background-color: skyblue;
}
</style>

由于两个组件的类名一致且都选用类名选择器,所以:
在这里插入图片描述
最终色是哪个取决于App.vue中引入组件的顺序,

import School from './components/School.vue'
import Student from './components/Student.vue'

在style标签中加入scoped,则可防止样式冲突。本质是本组件的元素添加了自定义属性,选择器采用类名[属性名=属性值]的叠加选择器
在这里插入图片描述

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

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

相关文章

Springboot整合J2cache实现声明式缓存方案

Springboot整合J2Cache 一、J2Caceh多级缓存 ​ J2Cache 是 OSChina 目前正在使用的两级缓存框架&#xff08;要求至少 Java 8&#xff09;。 ​ 第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine)&#xff0c;第二级缓存使用 Redis(推荐)/Memcached 。 L…

【生日视频制作】红色跑车法拉利提车交车仪式感广告展示牌AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程红色跑车法拉利提车交车仪式感广告展示牌AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】红色跑车法拉利提车交车仪式感广告展示牌AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安…

Java小项目IDEA怎么打成jar包

使用IDEA打jar包 在file选项中找 打开jar包所在位置&#xff1a; 将jar包拿出来 直接点击jar包就可以运行

golang关于slice map函数传参的小问题

问题 函数传参了一个slice&#xff0c;在函数内触发了对长度的修改&#xff08;添加或删除&#xff09;&#xff0c;但是未影响函数外的实参由此产生了另一个问题&#xff0c;我们用map在函数内修改会不会有影响不到实参的情况&#xff1f; 结论 map作为函数参数时是引用传递…

go语言并发编程-超详细mutex解析

文章目录 1 go语言并发编程学习-mutex1.1 学习过程1.2 如何解决资源并发访问的问题&#xff1f;【基本用法】1.2.1 并发访问带来的问题1.2.1.1 导致问题的原因 1.2.2 race detector检查data race1.2.3 mutex的基本实现机制以及使用方法1.2.3.1 具体使用-11.2.3.1 具体使用-2 1 …

@Tanstack/vue-query 的使用介绍

Tanstack/vue-query 的使用介绍 前言 在今年的vue conf 会议上&#xff0c;提到了vue-query这个库&#xff0c;这里对它的基本使用做一个介绍。 会议资料地址&#xff1a; https://vueconf.cn/ Tanstack-query的前身是react-query&#xff0c;是一个本地的服务端状态管理的库…

deepin 23 下如何运行绝大数 Windows 游戏?

查看原文 最近有很多 deepiner 一直在询问&#xff1a; “deepin 真的可以玩游戏&#xff1f;” “如何在 deepin 上玩游戏&#xff1f;能玩 windows 上的游戏吗&#xff1f;” 答案是肯定的 “必须能&#xff01;”&#xff0c;下文和大家分享一下在 deepin 上玩游戏实现的…

使用IoC容器--Ninject

Ninject Ninject是一个较新的开源的IoC容器。这是简单和可扩展的。你可以从下面的位置下载IoC容器。 Ninject 或者您可以使用 NuGet 向您的项目添加Ninject。让我们从NuGet向我们的项目中添加Ninject。只需转到您的项目引用并右键单击&#xff0c;然后 ManageNuGet Packages&a…

Java基础 2. Java基础语法

Java基础 2. Java基础语法 文章目录 Java基础 2. Java基础语法2.1. 标识符2.1.1. 标识符的命名规则 :2.1.2. 标识符的命名规范: 2.2. 关键字2.3. 字面量2.3.1. Java中有哪些字面量2.3.2. 加号运算符 2.4. 变量2.5. 二进制2.6. 八进制与十六进制2.7. 原码反码补码2.7.1. byte与b…

每日OJ_牛客_字符串计数(模拟26进制)

目录 牛客_分解因数&#xff08;简单模拟&#xff09; 解析代码 牛客_分解因数&#xff08;简单模拟&#xff09; 字符串计数_美团笔试题_牛客网 解析代码 题目意思&#xff1a;按照字典序列&#xff1a;找到s1和s2之间长度在len1和len2范围内的字符串个数。直接做不好处理&…

UE4 使用AndroidGameDevelopmentExtension(AGDE)对安卓客户端做“断点调试”与“代码热更”

本文的目的 主要介绍了如何通过AndroidGameDevelopmentExtension工具、Visual Studio 2022来进行安卓包调试。 流程全过程 1、安装JDK、Gradle、Android NDK、Android SDK等环境如下&#xff0c;请自行前往官网下载&#xff0c;并确认环境参数配置正确。 2、安装 AndroidGame…

黑悟空上线即登顶,如何一路火遍全网?哪些营销方式值得关注?

几乎人人都有一个大圣梦&#xff0c;就像每个品牌也都想成为“黑神话&#xff1a;悟空”&#xff08;以下简称“黑悟空”&#xff09;。 作为国内首款3A游戏&#xff0c;黑悟空上线即登顶&#xff0c;直接刷爆全网。虽然目前热度渐歇&#xff0c;但创造的流量神话仍被津津乐道。…

大佬借助ChatGPT写论文发刊到手软,四个步骤20个顶级学术提示词指令

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。经过数月爆肝,终于完成学术AI使用教…

Mybatis【分页插件,缓存,一级缓存,二级缓存,常见缓存面试题】

文章目录 MyBatis缓存分页延迟加载和立即加载什么是立即加载&#xff1f;什么是延迟加载&#xff1f;延迟加载/懒加载的配置 缓存什么是缓存&#xff1f;缓存的术语什么是MyBatis 缓存&#xff1f;缓存的适用性缓存的分类一级缓存引入案例一级缓存的配置一级缓存的工作流程一级…

《OpenCV计算机视觉》—— 图像形态学(腐蚀、膨胀等)

文章目录 一、图像形态学基本概念二、基本运算1.简单介绍2.代码实现 三、高级运算1.简单介绍2.代码实现 一、图像形态学基本概念 图像形态学是图像处理科学的一个独立分支&#xff0c;它基于集合论和数学形态学的理论&#xff0c;专门用于分析和处理图像中的形状和结构。图像形…

分贝通助力元气森林企业支出一体化降本提效

凭借着“0糖0脂0卡”这句广告语,元气森林几乎是一锤砸中了年轻消费者的内心,让“好喝不胖”深入人心,成为了国内饮品消费的新风向标。如果我们从近两年的快消饮品中选出几款深受消费者喜爱的“国货品牌”的话,相信「元气森林」一定上榜。 元气森林成立于2016年,旗下拥有元气森林…

深入理解并实现——快排【C语言版】

目录 一、快排介绍及其思想 二、hoare版本 三、前后指针版 四、挖坑法 五、优化版本 5.1 三数取中 5.2 小区间优化 六 、非递归实现快排 七、三路划分 八、introsort 小结 一、快排介绍及其思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一…

【数据结构】Map的使用与注意事项

文章目录 概念模型Map 的使用put() 和 get()getOrDefault()remove()keySet()entrySet() 注意事项 概念 Map 和 set 是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。 以前常见的搜索方式有&#xff1a; 直接遍历&#xff0c;时间…

Spring AOP(下)原理

本文我们来学习 Spring AOP 的原理&#xff0c;也就是 Spring 是如何实现 AOP 的。Spring AOP 是基于动态代理来实现 AOP 的&#xff1b; 1. 代理模式 1.1 代理弄模式的定义 代理模式&#xff0c;也叫委托模式。 定义&#xff1a;为其他对象提供一种代理以控制这个对象的访问…

【第三版 系统集成项目管理工程师】第14章 收尾过程组

持续更新。。。。。。。。。。。。。。。 【第三版】第十四章 收尾过程组 14.1结束项目或阶段14.1.1主要输入1.项目章程-P5392.项目管理计划-P5393.项目文件-P5394.验收的可交付成果-P5405.协议-P5406.采购文档-P540 14.1.2主要输出1.最终产品、服务或成果-P5402.项目最终报告…