vue-property-decorator 提供 OO 的风格 Vue Component 方便类型声明

@Prop  父子组件之间传值

Install:

npm install --save vue-property-decorator

Child:

<template><div>{{fullMessage}}</div>
</template><script lang="ts">import Vue from 'vue'
import {Component, Prop} from 'vue-property-decorator'@Component({})
export default class Child extends Vue {message: string = "Hello";@Prop({type: String,default: 'Default Value'}) msg: string;get fullMessage() {return `${this.message},${this.msg}`;}
}
</script>

Parent:

<template><div class="hello"><h1 v-colorDirective="{color: 'red', backgroundColor: 'blue'}">{{ message }}</h1><button @click="clicked">Click</button><ChildComp msg="'What a good day!'"/><router-link to="/hello-ts">Hello Ts</router-link></div>
</template><script lang="ts">
import Vue from 'vue'
import Component from 'vue-class-component'
import colorDirective from '../color-directive';import ChildComp from './Child.vue';@Component({directives: {colorDirective},components: {ChildComp}
})
export default class Hello extends Vue {message: string = 'Welcome to Your Vue.js App'get fullMessage() {return `${this.message} from Typescript`}created() {console.log('created');}beforeRouteEnter(to, from, next) {console.log("Hello: beforeRouteEnter")next()}beforeRouteLeave(to, from, next) {console.log("Hello: beforeRouteLeave")next()}clicked() {console.log('clicked');}
}
</script>

 

@Model  数据双向绑定

Checkbox:

<template><div><input type="checkbox" :id="id" :checked=checked @change="changed"/> {{label}}</div>
</template><script lang="ts">
import Vue from 'vue'
import { Component, Prop, Model } from 'vue-property-decorator'
@Component
export default class MyCheckbox extends Vue {@Prop() label: string@Prop() id: string@Prop()@Model('change') checked: booleanchanged(ev) {this.$emit('change', ev.target.checked)}
}
</script>

Parent Component:

<template><div><MyCheckbox :label="checkbox.label" :id="checkbox.id" v-model="checkbox.checked"/>{{JSON.stringify(checkbox)}}</div>
</template>
<script lang="ts">import Vue from 'vue'
import {Component} from 'vue-property-decorator'
import MyCheckbox from './MyCheckBox.vue'@Component({components: {MyCheckbox}
})
export default class HelloTs extends Vue {checkbox = {label: 'Fancy checkbox',id: 'checkbox-id',checked: true}
}
</script>

@Watch  监听数据变化

<template><div class="hello"><button @click="clicked">Click</button> {{sum.acum}}</div>
</template><script lang="ts">
import Vue from 'vue'
import {Component, Watch} from 'vue-property-decorator'@Component({
})
export default class Hello extends Vue {sum = {acum: 0}@Watch('sum', {deep: true})watchCount(newVal, oldVal) {console.log("newVal", newVal, "oldVal", oldVal)}clicked() {this.sum.acum++;}
}
</script>

@Provide  提供  /  @Inject  注入

当您希望从父组件到子组件提供一些服务或数据时,您可以使用@Provide和@Inject。

Parent component:

<template><div class="hello"><ChildComp :msg="'What a good day!'"/></div>
</template><script lang="ts">
import Vue from 'vue'
import {Component, Provide} from 'vue-property-decorator'import ChildComp from './Child.vue';@Component({
})
export default class Hello extends Vue {@Provide('users')users = [{name: 'test',id: 0}]}
</script>

Child:

<template><div>{{users}}</div>
</template><script lang="ts">import Vue from 'vue'
import {Component, Inject} from 'vue-property-decorator'@Component({})
export default class Child extends Vue {message: string = "Hello";@Inject('users') users;
}
</script>

TypeScript 中创建 自己的修饰器

定义一个修饰器:

const Log = (msg) => {return createDecorator((component, key) => {console.log("#Component", component);console.log("#Key", key); //logconsole.log("#Msg", msg); //App})
}

使用:

@Log('fullMessage get called')
get fullMessage() {return `${this.message} from Typescript`
}

输出:

#Component Object {directives: Object, components: Object, name: "Hello", methods: Object, computed: Object…}
#Key fullMessage
#Msg fullMessage get called

.

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

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

相关文章

python学习笔记(1)

变量的命名 变量名只能包含字母、数字、下划线&#xff0c;不能以数字打头不要用Python关键字、函数名、保留用于特殊用途的单词作变量名变量名应短且有描述性慎用小写l和大写O字符串 就是一系列字符 在Python中&#xff0c;用引号扩起的都是字符串&#xff0c;引号可以是单引号…

使用这些HTTP标头保护您的Web应用程序

by Alex Nadalin通过亚历克斯纳达林 使用这些HTTP标头保护您的Web应用程序 (Secure your web application with these HTTP headers) This is part 3 of a series on web security: part 2 was “Web Security: an introduction to HTTP”这是有关Web安全的系列文章的第3部分&…

leetcode547. 朋友圈(并查集)

班上有 N 名学生。其中有些人是朋友&#xff0c;有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友&#xff0c;B 是 C 的朋友&#xff0c;那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈&#xff0c;是指所有朋友的集合。 给定一个 N * N 的矩阵 M&#xff0c;表…

linux ssh Unused,安装openssh-portable时遇到的问题及解决办法

问题1&#xff1a;configure: error: Your OpenSSL headers do not match yourlibrary. Check config.log for details.If you are sure your installation is consistent, you can disable the checkby running “./configure –without-openssl-header-check”.Also see cont…

windows 删除删除不掉的文件

DEL /F /A /Q \\?\%1RD /S /Q \\?\%1 windows下删除删除不掉的文件&#xff1a; 1、打开记事本&#xff0c;把上面的命令复制进去 2、保存&#xff0c;后缀名改为.bat&#xff0c;ok 3、把想要删除的文件托放到这个文件的图标上 转载于:https://www.cnblogs.com/Mike_Chang/p…

云计算技术的跃进睿云智合专业先进水平

对于未来的云计算数据中心&#xff0c;网络虚拟化方案需要适应计算和存储虚拟化的浪潮&#xff0c;快速的实现云计算业务的发放&#xff0c;以及能够满足动态的应用程序工作负载的需求;同时需要帮助管理员更简单的管理物理网络和虚拟网络&#xff0c;实现网络可视化。睿云智合&…

CSS 选择器权重计算规则

CSS 选择器&#xff08;Selector&#xff09;的权重&#xff08;Specificity&#xff09;决定了对于同一元素&#xff0c;到底哪一条 CSS 规则会生效。且仅有当多条 CSS 规则都对同一元素声明了相应样式时&#xff0c;才会涉及到权重计算的问题。 选择器的分类 正式计算选择器权…

本地构建和自动化构建_如何构建最强大,最安全的家庭自动化系统

本地构建和自动化构建by Amir Off由Amir Off 如何构建最强大&#xff0c;最安全的家庭自动化系统 (How to build the most robust and secure home automation system) In this article, I’ll discuss how I built a Smart Home Automation System with Angular and Node.js …

leetcode990. 等式方程的可满足性(并查集)

给定一个由表示变量之间关系的字符串方程组成的数组&#xff0c;每个字符串方程 equations[i] 的长度为 4&#xff0c;并采用两种不同的形式之一&#xff1a;“ab” 或 “a!b”。在这里&#xff0c;a 和 b 是小写字母&#xff08;不一定不同&#xff09;&#xff0c;表示单字母…

random对文件随机重命名

对文件随机重命名&#xff0c;这个用途可广了&#xff0c;大家可以想想 echo off setlocal ENABLEDELAYEDEXPANSION for /r %%a in (*.txt) do ( set c!random! ren %%~dpnsa.txt !c!.txt) pause 本文转自sucre03 51CTO博客&#xff0c;原文链接&#xff1a;http://blog…

AC日记——Periodic RMQ Problem codeforces 803G

G - Periodic RMQ Problem 思路&#xff1a; 题目给一段序列&#xff0c;然后序列复制很多次&#xff1b; 维护序列很多次后的性质&#xff1b; 线段树动态开点&#xff1b; 来&#xff0c;上代码&#xff1a; #include <cstdio> #include <cstring> #include <…

数据之路 - Python爬虫 - 数据存储

一、文件存储 1.文件打开方式 文件打开方式说明r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式rb以二进制只读方式打开一个文件。文件指针将会放在文件的开头r以读写方式打开一个文件。文件指针将会放在文件的开头rb以二进制读写方式打开一个文件。文件指针…

创建react应用程序_如何使用React创建一个三层应用程序

创建react应用程序Discover Functional JavaScript was named one of the best new Functional Programming books by BookAuthority!“发现功能JavaScript”被BookAuthority评为最佳新功能编程书籍之一 &#xff01; Splitting a Single Page Application into layers has a …

linux update语句,MySQL 多表 update sql语句总结

MySQL 多表 update 有几种不同的写法。假定我们有两张表&#xff0c;一张表为Product表存放产品信息&#xff0c;其中有产品价格列Price&#xff1b;另外一张表是ProductPrice表&#xff0c;我们要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%。在Mysql中我…

linux延时与定时操作

1、at ---系统延迟任务发起命令 at time >command ---任务指令 >ctrld ---发起任务 at -l ---列出延时任务Id at -r id ---删除改id任务 at -m ---让无输出的命令产生邮件 at -M ---让有输…

windows修改PowerShell(命令提示符)默认中文编码方式

如果以下方法都没有作用的话&#xff0c;可以直接在代码中调用<stdlib.h>中的system("mode con cp select65001")或者是system("chcp 65001")。当然&#xff0c;前提是你用的也是C、C、C#等强类型编程语言。 **************************************…

leetcode面试题 17.07. 婴儿名字(并查集)

每年&#xff0c;政府都会公布一万个最常见的婴儿名字和它们出现的频率&#xff0c;也就是同名婴儿的数量。有些名字有多种拼法&#xff0c;例如&#xff0c;John 和 Jon 本质上是相同的名字&#xff0c;但被当成了两个名字公布出来。给定两个列表&#xff0c;一个是名字及对应…

appium+python+iOS 环境搭建与使用中常见问题的解决方案链接

&#xff08;1&#xff09;WebDriverAgent 安装入门篇&#xff1a;https://www.cnblogs.com/zhanggui/p/9239827.html 重点摘要&#xff1a; 在WDA的Github上也给出了WDA的特性&#xff1a; 1.支持真机 &&模拟器 在模拟器上运行还是比较方便的&#xff0c;在真机上需要…

api工厂接口路径是什么_为什么(几乎)永远不要再使用绝对路径访问API

api工厂接口路径是什么by Vitaly Kondratiev通过维塔利康德拉季耶夫(Vitaly Kondratiev) 为什么(几乎)永远不要再使用绝对路径访问API (Why you should (almost) never use an absolute path to your APIs again) Recent advances in web apps architecture show that a decou…

双机通信c语言程序,上传一个自己编写的I2C双机通信程序

本帖最后由 micro_听海 于 2012-11-24 19:58 编辑这几天一直在搞AVR的twi(twi就是i2c)双机通信程序&#xff0c;使用的是两块arduino开发板。因为最总要这个通信程序最总是要放在winavr的编译环境中&#xff0c;所以没有使用arduino自带的库函数。但是这没关系&#xff0c;因为…