在vue-cli中使用vue-property-decorator装饰器

2023-05-16

安装

npm i -s vue-property-decorator

如果你的项目是安装了TS那么就可以直接使用,如果没有安装TS但是还是想用vue-property-decorator装饰器那么就还需要去配置一下了

使用vue-property-decorator要用babel转义,因为我们的项目中是没安装TS的是直接使用

babel.config.js文件中

module.exports = {
  presets: [
    '@vue/app'
  ],
  plugins: [
    // vue-property-decorator 配置
    ['@babel/plugin-proposal-decorators', { legacy: true }],
    ['@babel/plugin-proposal-class-properties', { loose: true }],
    // end vue-property-decorator 配置
  ]
}

在jsconfig.json文件中

{
  "compilerOptions": {
    "experimentalDecorators": true
  }
}

那么就可以使用了那么下面我们对分别装饰器一一案例解答

@Component

@Component 装饰器可以接收一个对象作为参数,可以在对象中声明 components ,filtersdirectives等未提供装饰器的选项

虽然也可以在@Component装饰器中声明computedwatch等,但并不推荐这么做,因为在访问this时,编译器会给出错误提示

import TSTest from './zj'
import { Component, Vue } from 'vue-property-decorator'
@Component({
  components: {
    TSTest // 组件名称
  }
})
class element_1 extends Vue {
  aa = true
  // 显示按钮
  handleShow () {
    console.log('我被点击了')
    this.aa = true
  }
}
export default element_1

注意:@Component({})这个是是放在class外面的为什么呢?我认为是因为在Component对象中的值是一些定义,和渲染的作用的方法,可以不用去继承Vue中的一些方法,例如:filters(过滤),都是自己定义就好了,对吧,所以就写出来了

@Prop

当父组件有传:show的时候那么子组件就可以这样使用了

参数一:类型,默认值

注意是在TS中的写法好像show后面还有加!什么的但是不用TS的话就不需要,比如我就没用只是单单用这个装饰器

@Prop({ type: Boolean, default: true }) show

@PropSync

不知道大家对.sync修饰符的理解是这么样了,可以看我以前写的-sync

这里的show就是接收的值,当showTransmit值发生改变的时候,这个值就会传递给父组件中:show中的那个值

 @PropSync('show', { type: Boolean, default: true }) showTransmit

当然你要认为@PropSync难理解只用@Prop也可以就是要外加

参数二 :改变的值这里为false,传给父组件

this.$emit('update:show', false);

@Watch

监听,这个简单好理解

参数一:监听的值

参数二:对象

  @Watch('showTransmit', { immediate: true, deep: true }) //这里不用this
  // immediate?:boolean  侦听开始之后是否立即调用该回调函数
  // deep 被侦听的对象的属性被改变时,是否调用该回调函数,也就是深度查询
  showTransmitWatch (newVal, oldVal) {
    console.log('改变后的值', newVal)
    console.log('改变前的值', oldVal)
  }

@Model

v-molder的装饰器,这个比较复杂,可以先看我以前写的vue的介绍 -- Model

HTML:这个是子组件中的input

<input type="text" :value="value1" @change="handleVal2($event)" />

JS

解析:

modelEvent是告诉父组件需要监听的事件,value1是父组件传过来的值

相当于

model:{
  prop: 'value1', // value1是子组件接收的值,传递给父组件的值是$emit('input','参数')中的参数的值,注意的是子组件不要直接拿父组件传过来的值去修改
  event: 'modelEvent' // js中那个父需要的监听事件的名称(用了v-molder语法糖会默认存在),$emit的事件参数(e.target.value)会自动成为父组件中传进来的值(由语法糖完成赋值)
}
@Model('modelEvent', { type: String, default: '我是默认值' }) value1

// 事件
  handleVal2 (e) {
    this.$emit('modelEvent', e.target.value)
  }

解析和注意事项:

解析:当input中的@change事件触发的时候(input中的内容发生改变),handleVal2()事件执行,给父组件监听事件modelEvent,和参数e.target.value,由于@Model中的设置那么这个参数会传给父组件中v-model中的值,同时父组件会跟新value1的值传给子组件

注意:value1的值只是父组件传给子组件的值,当父组件传的值不改变他是不会变的;外面不要直接去改变value1的值,因为有可能value1的值是对象的时候有引用类型的问题

@Mixins

class OperationStockControlInventoryEarlyWarning extends Mixins(ListMixin) {}

这样就继承了ListMixin文件中的东西,我再ListMixin文件有继承Vue那么OperationStockControlInventoryEarlyWarning文件也就继承了Vue,同时还有ListMixin文件中写的东西

class ListMixin extends Vue

@Inject/ @Provide

provide 和 inject 绑定并不是可响应的。这是刻意为之的。

父组件定义

用Vue.observable({})定义可以在变得响应

  /**
   * 提供祖先组件的实例
   */
  @Provide() provideParam = Vue.observable({
    isClickInquireBtn: false // 是否点击查询按钮
  });

子组件监听

@Inject({ type: Object, default: () => {} }) provideParam // 父组件对象


@Watch('provideParam', { deep: true })
  provideParamWatcher (val) {
    if (val.isClickInquireBtn) {
     //进行一些操作
    }
  }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在vue-cli中使用vue-property-decorator装饰器 的相关文章

  • 检查函数是否被调用为装饰器

    在下面的最小示例中decorate被调用两次 第一次使用 decorate 第二个通过正常函数调用decorate bar def decorate func print func name return func decorate def
  • Python 装饰器有哪些常见用途? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 虽然我喜欢将自己视为一名相当有能力的 Python 程序员 但我从未理解过的语言的一个方面是装饰器 我知道它们是什么 表面上 我读过 St
  • 装饰者的奇怪之处

    我想制作一个装饰器来捕获异常并充分记录它们 def logger foo try print foo except Exception as e print e logger def d return 2 2 if name main d
  • TypeScript 编译中的实验装饰器警告

    我收到警告 对装饰器的实验性支持是一项在未来版本中可能会发生变化的功能 设置 experimentalDecorators 选项 以删除此警告 即使我的 tsconfig json 中的compilerOptions具有以下设置 emitD
  • Ruby 中的装饰器(从 Python 迁移)

    我今天从 Python 的角度学习 Ruby 我完全无法解决的一件事是装饰器的等效项 为了简化事情 我尝试复制一个简单的 Python 装饰器 usr bin env python import math def document f de
  • 黑豹程序员-字符串中查找出重复的字符串

    Collections frequency codeList element 字符串element 在codeList集合中重复的次数 List
  • Vue3 和Vue2的区别,以及钩子函数的使用

    Vue js 3 和 Vue js 2 是两个主要版本的流行前端框架 它们之间有很多区别 包括性能优化 新特性和改进的API等 以下是一些Vue 3与Vue 2之间的主要区别 以及一些示例代码来说明这些差异 1 性能优化 响应式系统 Vue
  • 为泛型接口配置装饰器,并在简单注入器中将所有实例注入到具有非泛型接口参数的构造函数

    我一直在使用与所描述的非常相似的模式在这篇优秀的文章中 http www cuttingedge it blogs steven pivot entry php id 91将命令和查询作为对象 我还使用 SimpleInjector 作为
  • 装饰器运行错误:“UnboundLocalError:赋值前引用的局部变量‘count’”

    我在两个不同的装饰器中创建了两个变量 一个装饰器工作正常 但另一个显示错误 def running average func data total 0 count 0 def wrapper args kwargs print data v
  • Django:员工装饰者

    我正在尝试为 Django 编写一个 仅限员工 的装饰器 但我似乎无法让它工作 def staff only error Only staff may view this page def dec view func def view re
  • 默认参数装饰器 python

    Python 3 6 我正在尝试创建一个装饰器 自动将参数的字符串指定为默认值 such as def example one one two two three three pass 相当于 DefaultArguments def ex
  • 使用装饰器进行 Python 日志记录

    这是我们面对装饰器时遇到的第一个例子 但我无法意识到我到底想要什么 一个名为 LOG 的简单装饰器 它应该像这样工作 LOG def f a b 2 c d pass 结果应该是这样的 f 1 pippo 4 paperino luca E
  • python 装饰器 *args 和 ** kwargs

    我对编码是全新的 我一直在努力吸收尽可能多的东西 我不明白你们发布的很多技术解释 所以请尽量用简单的英语 我了解装饰器函数如何工作的机制 但我的问题是遵循代码逻辑 特别是为什么我们必须添加 args 和 kwargs 声明我们传递给带有参数
  • numpy 数组的缓存装饰器

    我正在尝试为具有 numpy 数组输入参数的函数制作一个缓存装饰器 from functools import lru cache import numpy as np from time import sleep a np array 1
  • 如何在责任链中注入下一个处理程序的依赖关系?

    在我当前的项目中 我使用了相当多的责任链模式 然而 我发现通过依赖注入配置链有点尴尬 给定这个模型 public interface IChainOfResponsibility IChainOfResponsibility Next ge
  • 解析装饰器中的 args 和 kwargs

    我有一个需要 args 和 kwargs 的函数 我需要根据 args 和 kwargs 的值在我的装饰器中做一些事情2nd函数中的arg 如下面的代码所示 def workaround func def decorator fn def
  • 检查函数是否被修饰

    我正在尝试在类方法中构建一个控制结构 该方法将函数作为输入 并且如果函数被修饰或未修饰 则具有不同的行为 关于如何构建函数的任何想法is decorated其行为如下 def dec fun do decoration def func d
  • 装饰所有 django 管理视图 (1.4+)

    对于 1 4 之前的 Django 版本来说 曾经有一个巧妙的技巧来装饰管理中的所有视图 urlpatterns patterns r admin my decorator lambda args admin site root args
  • Python 元类有什么用?

    元类可以用其他方式做不到的事情做什么 Alex Martelli 表示 有些任务如果没有元类就无法完成Python 元类与类装饰器 https stackoverflow com questions 1779372 python metac
  • 代理模式和装饰者模式的区别

    你能给出任何好的解释吗 Proxy and 装饰者 我看到的主要区别是 当我们假设Proxy uses 作品 and 装饰者 uses 聚合那么似乎很清楚 通过使用多个 一个或多个 装饰器您可以修改 添加功能到预先存在的实例 装饰 而Pro

随机推荐

  • 数据库服务器的安装与配置

    理论基础 数据库服务器是当今应用最为广泛的一种服务器类型 xff0c 许多企业在信息化建设过程中都要购置数据库服务器 数据库服务器主要用于存储 查询 检索企业内部的信息 xff0c 因此需要搭配专用的数据库系统 xff0c 对服务器的兼容性
  • IDEA刷新与清除缓存

    idea清除缓存 刷新项目 idea刷新与清除缓存的正确菜单 Build Project xff1a 更新Project下所有的Module Build Module xff1a 更新指定的Module Rebuild Project xf
  • VNC远程桌面安装配置

    VNC远程桌面安装配置 服务器 xff1a Linux centos 7 0 客户端 xff1a Windows 10 1 服务器安装vnc服务端2 编辑vnc配置文件3 客户端安装4 解决端口访问的问题 1 服务器安装vnc服务端 直接用
  • 第1章 计算机基础知识

    1 1 计算机的基本概念 xff08 1 xff09 计算机的发展 计算机的诞生 1946年第一台电子数字计算机ENIAC由美国宾夕法尼亚大学研制成功 它是一个庞然大物 xff0c 共有18000个电子管 1500个继电器 xff0c 耗电
  • WIN7系统下搭建Docker,部署ODL与mininet

    1 docker 安装 版本 xff1a 18 03 win7系统下和win10系统稍有不同 安装流程 xff1a https www runoob com docker windows docker install html 由于国外源问
  • Debian10中文环境配置

    在安装系统的时候会有一个语言区域选项 xff0c 不管当时选的什么 xff0c 在这里都可以更改 同时解决中文乱码问题 以下操作最好在root用户下进行 xff0c root用户操作起来方便一些 xff0c 不会被权限困扰 换源 最好在做所
  • Redis删除key

    Redis 删除 key 的方式分为两种 xff0c 一种是单独删除指定的 key xff0c 另一种是根据通配符进行批量删除 1 删除指定的 key 1 登录 Redis 客户端 redis cli 注 xff1a 如果提示 Redis
  • Jlink下载stm32cube生成的程序会出现No Cortex-M SW Device Found错误,下载的第一次没事,第二次就会报错

    Jlink下载stm32cube生成的程序会出现No Cortex M SW Device Found错误 xff0c 下载的第一次正常 xff0c 第二次就会报错的问题 作为写stm32的神器stm32cubemx越来越多人开始使用 xf
  • Hadoop 典型Writable类详解

    Hadoop 典型Writable类详解 Hadoop将很多Writable类归入org apache hadoop io包中 xff0c 在这些类中 xff0c 比较重要的有Java基本类 Text Writable集合 ObjectWr
  • 判断js数据类型的方法

    基本类型 String xff0c Number xff0c Boolean xff0c Undefined xff0c Null xff0c Symbol 引用类型 Object 但是有些时候我们需要的是把数组啊 xff0c 函数啊 xf
  • javaScript 运行时环境

    js的执行阶段 网页的线程 JS引擎线程 xff1a 也称为JS内核 xff0c 负责解析执行Javascript脚本程序的主线程 xff08 例如V8引擎 xff09 事件触发线程 xff1a 归属于浏览器内核进程 xff0c 不受JS引
  • 如何用策略模式,优化你代码里的的if-else?

    最近有一个学妹在跟我沟通如何有效的去避免代码中一长串的if else判断或者switch条件判断 xff1f 针对更多的回答就是合理的去使用设计来规避这个问题 在设计模式中 xff0c 可以使用工厂模式或者策略模式来处理这类问题 xff0c
  • Vue组件生命周期执行顺序

    通过学习他人的博客学习到的知识点 xff0c 小白我 xff0c 顺便总结下 xff0c 引出问题 需求 xff1a 父组件刚更新完 xff0c 子组件要立马获取到父组件中传过来的值 created xff1a 在实例创建完成后被立即调用
  • 前端面试题---DOM测试36

    得分 这个题目7分我是得了4分 解析 第一问 var textarea 61 document querySelector 39 textarea 39 第二问 1 对象添加 textarea rows 61 5 2 元素添加 textar
  • 前端小测----CSS基础测试11

    得分 这个题目8分我得了5分 分析 关于HTML语义 xff1a article用在非常大段的完整的描述内容上 header是表示非常完整的整页的头部 xff0c 不是具体某一两个标题头 对于一个文字列表的标题 xff0c 级别h3 h6之
  • webpack对CSS使用alias相对路径

    问题来源 由于对页面的路由需要一些修改 xff0c 要对几乎全部的 vue文件添加一个父文件 xff0c 然后改路由 xff0c 但是问题来了 xff0c 没一个页面的文件 xff0c 资源路径都要改 xff0c import还好可以用al
  • Base64的学习

    来源 再一次看比如的代码的时候发现别人的图标是一串很长的字符串 xff0c 而不是路径引用 xff0c 从而开启了我对Base64的学习 解决 原生的atob和btoa方法进行Base64的编码 atob xff1a 解码 从a base6
  • localStorage和sessionStorage区别和使用

    一 什么是localStorage 在HTML5中 xff0c 新加入了一个localStorage特性 xff0c 这个特性主要是用来作为本地存储来使用的 xff0c 解决了cookie存储空间不足的问题 cookie中每条cookie的
  • 前端小测----DOM测试38

    得分 我得了2分 xff0c 难受 xff0c 明明感觉是3分的 哈哈 分析 其实这个题目就是对伪类进行了一定考察 xff0c 我太菜了 xff0c 呜呜呜 第一问 xff1a 获取所有匹配required必选的单选框元素 我的答案 var
  • 在vue-cli中使用vue-property-decorator装饰器

    安装 npm i s vue property decorator 如果你的项目是安装了TS那么就可以直接使用 xff0c 如果没有安装TS但是还是想用vue property decorator装饰器那么就还需要去配置一下了 使用vue