zoukankan      html  css  js  c++  java
  • [Vue @Component] Extend Vue Components in TypeScript

    This lesson shows how you can extend and reuse logic in Vue components using TypeScript inheritance. It will take you through extending a component, its properties and methods, and how hooks are triggered along the inheritance tree.

    We can define a Parent.ts file, which only contains the logic without any template:

    import { Component, Vue } from 'vue-property-decorator';
    
    @Component
    export default class Parent extends Vue {
        created() {
            console.log("Parent is created")
        }
    
        click() {
            console.log("Parent is clicked")
        }
    
        parentClicked() {
            console.log("Parent is clicked")
        }
    }

    Then we can extends this Parent Class from a vue component:

    <template>
      <div class="hello">
        <h1>{{ msg }}</h1>
        <h2>{{ fullMessage }}</h2>
        <button @click="click">Click</button>
        <button @click="parentClicked">Parent Click</button>
      </div>
    </template>
    
    <script lang="ts">
    import { Component, Prop, Vue } from 'vue-property-decorator';
    import Parent from './Parent';
    
    @Component
    export default class HelloWorld extends Parent {
      @Prop() private msg!: string;
    
      // replace computed props
      get fullMessage() {
        return `${this.msg} should be fullmessage from a getter`
      }
    
      created() {
        console.log("Component is created")
      }
    
      click() {
        alert('Should replace what used to be defined in methods objects')
      }
    }
    </script>

    Once we extends from Parent, HelloWorld Component can inherit its Parent class's methods and props.

     For example:

    Will call parentClicked method from Parent Class from HelloWorld Component.

    <!-- HelloWorld.vue -->
    <button @click="parentClicked">Parent Click</button>

    If we don't define 'click' method in HelloWolrd component, it will using Parent's click() method.

  • 相关阅读:
    composer使用git作为仓储
    monolog记录日志
    lumen laravel response对象返回数据
    lumen中间件 Middleware
    AcWing 901. 滑雪
    leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
    acwing 902. 最短编辑距离
    ACWING 844. 走迷宫
    leetcode 5199. 交换字符串中的元素
    AcWing 836. 合并集合
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9410784.html
Copyright © 2011-2022 走看看