vue-property-decorator和typescript结合构建的class类组件,父组件触发子组件方法的方式

class类组件示例

  • Father类组件

    <template>
    <div>
    <h1>父组件</h1>
    <button @click="handleSonMethod">点击触发子组件方法(修改子组件的描述)</button>
    <Son ref="son" />
    </div>
    </template> <script lang='ts'> // lang要定义为ts
    import { Vue, Prop, Component } from "vue-property-decorator";
    import Son from "./Son.vue"; @Component({
    name: "Father",
    components: { Son }
    })
    export default class Father extends Vue {
    // prop
    @Prop(Array) sub_projects!: string[]; // 必传
    @Prop(String) selected_project?: string; // 非必传 // data
    son: any = null // 存储子组件
    selected_org: string = "1";
    options: Array<{ value: string; label: string }> = [
    {
    value: "1",
    label: "1"
    },
    {
    value: "2",
    label: "2"
    },
    {
    value: "3",
    label: "3"
    }
    ]; // computed 计算属性
    get username(): string {
    return `计算属性username`;
    } // 钩子函数
    created() {
    console.log("created钩子触发了");
    } // method 方法
    handleSonMethod() {
    // 调用子组件的handleChangeDesc方法
    (this.$refs.son as any).handleChangeDesc('你好,中国')
    }
    }
    </script>
  • Son类组件

    <template>
    <div>
    <h2>子组件的描述信息:<span style='color: red'>{{ desc }}</span></h2>
    </div>
    </template> <script lang='ts'>
    import { Vue, Component } from "vue-property-decorator"; @Component({ name: "Son" })
    export default class Son extends Vue { // data
    desc: string = "我是子组件Son"; /**
    * @description: 修改子组件展示的描述信息
    * @param { string } msg 子组件描述信息
    */
    handleChangeDesc(msg: string) {
    this.desc = msg;
    }
    }
    </script>

父组件触发子组件方法的方式

  • 以前的方式 this.$refs.son.handleChangeDesc('你好,中国')

    • 会报错,因为引入了typescript

  • 第一种方式:类型断言

    • as 关键字(推荐用这种)

      handleSonMethod() {
      // 调用子组件的handleChangeDesc方法
      (this.$refs.son as any).handleChangeDesc('你好,中国')
      }
    • <数据类型> ===>> 比如

      handleSonMethod() {
      // 调用子组件的handleChangeDesc方法
      (<any>this.$refs.son).handleChangeDesc('你好,中国')
      }
  • 第二种方式:将this.$refs.son赋值给一个组件的一个属性

    // 1. 组件上定义一个可以存储任意数据类型值的属性‘son’
    son: any = null // 存储子组件 // 2. 将子组件的实例赋值给‘son’,通过这个变量去调用子组件的方法
    handleSonMethod() {
    // 调用子组件的handleChangeDesc方法
    this.son = this.$refs.son
    this.son.handleChangeDesc('你好,中国')
    }
  • 效果图

    • 触发前

    • 触发后

vue-property-decorator和typescript结合构建的class类组件,父组件触发子组件方法的方式的更多相关文章

  1. vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)

    看了很多文章,官网文档也有看,对父子组件通信说的不是很明白:决定自己总结一下: vue一般都使用构建工具构建项目:这样每个组件都是单文件组件:而网上很多文章都是script标签方式映入vue,组件通信 ...

  2. vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题

    Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素,它是通过使 ...

  3. Vue : props 使用细节(父组件传递数据给子组件)

    props使用细节 在Vue.js中我们可以使用 props 实现父组件传递数据给子组件,下面我们总结一下props的使用细节 1.基础类型检查 2.必填数据 3.默认值 4.自定义验证函数 其中每一 ...

  4. vue中父组件传数据给子组件

    父组件: <template> <parent> <child :list="list"></child> //在这里绑定list对 ...

  5. vue.js中父组件触发子组件中的方法

    知识点:vue.js中,父组件的method中,触发子组件中的方法,获得子组件中的定义的属性 (1)子组件 : child_crud.js var html_child_crud= "< ...

  6. vue 父组件数据修改,子组件数据未修改

    页面: 父组件  <myfeedback></myfeedback>  子组件  <news></news> myfeedback.vue <te ...

  7. vue 父向子组件传递数据,子组件向父组件传递数据方式

    父组件向子组件传递数据通过props,子组件引入到父组件中,设置一个值等于父组件的数据,通过:bind将数据传到子组件中,子组件中通过props接收父组件的数据,这样就可以使用父组件的数据了,循环组件 ...

  8. vue父组件传参给子组件

    其实组件之间传参有很多种方法: 1.通过本地存储 2.使用vuex状态管理 今天记录一下第三种方法 1.首页我们先创建一个项目(创建项目自行百度) 2.打开项目,在components文件夹下新建一个 ...

  9. 【vue】父向子组件传参、子组件向父传参

    1.父向子组件传参 App.vue为父,引入componetA组件之后,则可以在App.vue中使用标签(注意驼峰写法要改成componet-a写法,因为html对大小写不敏感,componenta与 ...

随机推荐

  1. 浅谈C++虚函数机制

    0.前言 在后端面试中语言特性的掌握直接决定面试成败,C++语言一直在增加很多新特性来提高使用者的便利性,但是每种特性都有复杂的背后实现,充分理解实现原理和设计原因,才能更好地掌握这种新特性. 只要出 ...

  2. 【ZooKeeper系列】2.用Java实现ZooKeeper API的调用

    温馨提示:在这里我再次提个小要求,希望大家能习惯看官方文档,文档虽然是英文但用词都比较简单,基本都能看懂文档表达的意思.授之以鱼不如授之以渔的道理相信大家都明白,也希望通过猿人谷的这个ZooKeepe ...

  3. 【Activiti】使用学习

    [Activiti]使用学习 转载: ================================================== 1.下载安装 2.清空表 3.开启sql打印 4. 5. = ...

  4. AJAX 多次调用,后面的会覆盖前面的内容/数据

    1.有的时候,同一个请求链接,需要传递不同的参数,发起多个请求.因此我采用了for循环. 1.1 此处是需要传递的参数 function behavioranalysisReqstue(type) { ...

  5. 想要金九银十面试通关,不懂 Java多线程肯定是不行的!

    作者 | 纳达丶无忌 如果对什么是线程.什么是进程仍存有疑惑,请先 Google 之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用 CPU 的资源,因为所有的多线程代码都 ...

  6. 3年Java开发都知道的Redis数据结构和通用命令

    Redis的数据结构 Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景. 五种基础数据结构 String:字符串,是构建其他数据结构的基础 ...

  7. 东拼西凑完成一个“前端框架”(4) - Tabs页

    目录 东拼西凑完成一个后台 "前端框架" (1) - 布局  东拼西凑完成一个后台 "前端框架" (2) - 字体图标 东拼西凑完成一个"前端框架&q ...

  8. apache与tomcat的区别

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...

  9. 细解JavaScript ES7 ES8 ES9 新特性

    题记:本文提供了一个在线PPT版本,方便您浏览 细解JAVASCRIPT ES7 ES8 ES9 新特性 在线PPT ver 本文的大部分内容译自作者Axel Rauschmayer博士的网站,想了解 ...

  10. 【重大更新】AppWizard来了,emWin6.10版本来了

    说明: 1.快圣诞节了,MDK和SEGGER都太生猛了,发布了大量软件更新,而且都是比较大的改进,待我周报再给大家分享. 2.不枉我这么多年对emWin的支持,官方也用心,终于带来AppWizard, ...