vue-class-component 是 vue 的官方库,作用是用类的方式编写组件。

这种编写方式可以让.vue文件的js域结构更扁平,并使vue组件可以使用继承、混入等高级特性。

简单的示例:

ComponentA.vue

<template>
<div>
<p>{{ nameString }}</p>
<p>{{ child }}</p>
<button @click="comClick">button</button>
</div>
</template> <script>
import Vue from 'vue'
import Component from 'vue-class-component' @Component({
props: {
child: String
},
watch:{ },
components: { }
})
export default class ComponentA extends Vue {
// initial data
nameString = `ComponentA` // lifecycle hook
mounted () {
this.greet()
} // computed
get computedMsg () {
return 'computed ' + this.nameString
} // method
greet () {
console.log('greeting: ' + this.nameString)
} }
</script> <style> </style>

App.vue

<template>
<div id="app"> <component-a ref="a" :child="nameString" @com-click="fromChildEvent" /> </div>
</template> <script>
import Vue from 'vue'
import Component from 'vue-class-component'
import ComponentA from './ComponentA' @Component({
components: {
'component-a': ComponentA
}
})
export default class App extends Vue {}
</script> <style lang="less"> </style>

开始我并不理解这种全新的写法,心想:props watch components 写哪儿呢?

后来知道了,写在 @Component() 修饰器方法里。

关于js的修饰器可以参考这一篇文章

=== 分割线 ===

那么,能不能让这几个被拿出来的东西也写到里面呢?

可以的。

vue-property-decorator 是一个非官方库,是 vue-class-component 的很好的补充。它可以让vue的某些属性和方法,通过修饰器的写法让它也写到vue组件实例的类里面。

比如 @Prop @Watch @Emit。

我们把 ComponentA.vue 文件 App.vue文件 稍微改一下。

ComponentA.vue

<template>
<div>
<p>{{ nameString }}</p>
<p>{{ child }}</p>
<button @click="comClick">button</button>
</div>
</template> <script>
import { Vue, Component, Emit } from 'vue-property-decorator' @Component({
props: {
child: String
},
watch:{ },
components: { }
})
export default class ComponentA extends Vue {
// initial data
nameString = `ComponentA` @Emit()
comClick() {
return {
nameString:this
.nameString
}
}
}
</script> <style> </style>

App.vue

<template>
<div id="app"> <component-a ref="a" :child="nameString" @com-click="fromChildEvent" /> </div>
</template> <script>
import Vue from 'vue'
import Component from 'vue-class-component'
import ComponentA from './ComponentA' @Component({
components: {
'component-a': ComponentA
}
})
export default class App extends Vue {
// initial data
nameString = `App` fromChildEvent (obj) {
console.log(obj)
alert(
"METHODS fromChildEvent")
}
}
</script> <style lang="less">
</style>

我们用vue-property-decorator写了 @Emit() 。另外可能你也发现了,Vue、Component 也可以通过 vue-property-decorator 引入。

=== 分割线 ===

最后,有一个js公共修饰器库,core-decorators

这个库提供了非常多的修饰器,用惯了大概可以提高开发效率。

不过需要注意:core-decorators 和 typescript 不兼容。

以上。

vue : 对 vue-class-component 的个人理解的更多相关文章

  1. Vue 2.0 生命周期-钩子函数理解

    Vue 2.0 + 生命周期钩子在项目过程中经常用到,所以闲下来整理了下,直接复制下面的实例运行: <!DOCTYPE html> <html lang="en" ...

  2. vue中央事件总线eventBus的简单理解和使用

    公共事件总线eventBus的实质就是创建一个vue实例,通过一个空的vue实例作为桥梁实现vue组件间的通信.它是实现非父子组件通信的一种解决方案. 用法如下: 第一步:项目中创建一个js文件(我通 ...

  3. Vue.mixin Vue.extend(Vue.component)的原理与区别

    1.本文将讲述 方法 Vue.extend Vue.mixin 与 new Vue({mixins:[], extend:{}})的区别与原理 先回顾一下 Vue.mixin 官网如下描述: Vue. ...

  4. [Vue] Dynamic Vue.js Components with the component element

    You can dynamically switch between components in a template by using the reserved <component>  ...

  5. Vue Vue.use() / Vue.component / router-view

    Vue.use Vue.use 的作用是安装插件 Vue.use 接收一个参数 如果这个参数是函数的话,Vue.use 直接调用这个函数注册组件 如果这个参数是对象的话,Vue.use 将调用 ins ...

  6. Vue (三) --- Vue 组件开发

    ------------------------------------------------------------------好心情,会让你峰回路转. 5. 组件化开发 5.1 组件[compo ...

  7. vue系列---Vue组件化的实现原理(八)

    _ 阅读目录 一. 什么是Vue组件? 如何注册组件? 1.1 全局注册组件 1.2 局部注册组件 二:组件之间数据如何传递的呢? 1) props 2) $emit 3) 使用$ref实现通信 4) ...

  8. vue学习:vue+webpack的快速使用指南(新手向)

    一.vue有两种使用方式: 1.下载vue.js <script src="vue.js"></script> 2.使用npm npm install vu ...

  9. Vue 项目 Vue + restfulframework

    Vue 项目 Vue + restfulframework 实现登录认证 - django views class MyResponse(): def __init__(self): self.sta ...

  10. 【vue】vue +element 搭建及开发中项目中,遇到的错误提示

    1. import Layout from '@/views/layout/Layout'; export default [ { // 配置路由,当路径为'/activePublic',使用组件ac ...

随机推荐

  1. c++ 对vector和deque进行逆序排序问题

    1.vector vector<int> data1; 2.deque deque <int> data2; 逆序排序方式: 方式1.使用reverse函数   (内置数据类型 ...

  2. git常用代码合集

    git常用代码合集 1. Git init:初始化一个仓库 2. Git add 文件名称:添加文件到Git暂存区 3. Git commit -m “message”:将Git暂存区的代码提交到Gi ...

  3. sklearn机器学习算法--线性模型

    线性模型 用于回归的线性模型 线性回归(普通最小二乘法) 岭回归 lasso 用于分类的线性模型 用于多分类的线性模型 1.线性回归 LinearRegression,模型简单,不同调节参数 #2.导 ...

  4. 2020/6/11 JavaScript高级程序设计 DOM

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口).他描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 10.1 节点层次 DOM将任何HTML和XML ...

  5. python 3内置函数

    2018-07-14 enumerate() 用于指定下标 例: m = ['a','b','c'] for i,j in enumerate(m,1): print(i,j) 输出: 1 a 2 b ...

  6. 入门大数据---Hive是什么?

    这篇文章主要介绍Hive的概念. 简介: Hive中文名叫数据仓库管理系统,之前我们操作MapReduce必须通过编写代码或者通过特殊命令来实现,有了Hive我们通过常用的SQL语句就能操作MapRe ...

  7. 入门大数据---基于Zookeeper搭建Spark高可用集群

    一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...

  8. SpringBoot--使用JDBC连接mysql

    1.导入包     导入mysql和springJDBC的关系依赖包 <dependency> <groupId>org.springframework.boot</gr ...

  9. 【Spring注解驱动开发】如何使用@Value注解为bean的属性赋值,我们一起吊打面试官!

    写在前面 在之前的文章中,我们探讨了如何向Spring的IOC容器中注册bean组件,讲解了有关bean组件的生命周期的知识.今天,我们就来一起聊聊@Value注解的用法. 项目工程源码已经提交到Gi ...

  10. java面试知识迷你版

    java基础JUC.AQSJVM类加载过程mybatisSpringspringboot设计模式数据库redis网络问题认证授权Nginxlinux其他lombok消息队列ES缓存分库分表设计高并发系 ...