美文网首页
Typescript 里的getter 如何应用于vue

Typescript 里的getter 如何应用于vue

作者: V_Jan | 来源:发表于2019-12-25 11:28 被阅读0次

这个项目是基于ts+vue+webpack.
为了达到一个效果,下面的截图中Build按钮只在repository有选中并且tag name有值的情况下才可以用,否则不能用:


image.png

最开始的做法是:

  1. 利用一个boolean 值作为btn available的判断标准
  2. Typescript里写上一个方法根据checkbox选没选中和tagname是否有值来返回第一步的boolean值
  3. 复选框和输入框加事件监听,用于调用第二部的方法
    代码如下:
    TS:
export default class Plsite extends WiseVue {
tagAvailable: boolean = false;
setTagAvailable() {
        this.tagAvailable = !!(this.checkedRepositories.length > 0 && this.tagName !== "");
    }
}

vue, 监听部分我用中文标记了

<div id="tag-block">
            <span>Select Code Repositories to Release:</span>
            <div v-for="repo in gitRepositories" :key="repo">
                <input type="checkbox" :id="repo" :value="repo" v-model="checkedRepositories"
                       // 这里=>  @change="setTagAvailable" />{{repo}}

            </div>
            <span>Tag name for this release: </span>
            <div class="tag-name"><input type="text" v-model="tagName" required="required" // 这里=> 
 @keyup="setTagAvailable" placeholder="Enter Tag Name"/></div>
            <p class="sample-text"> Sample: v2.20180412.01 </p>
            <waitting-btn btn-class="button-unis color-white vertical-align" @click="triggerTagJob"
                          :value="'Build'"
                          :is-loading="loading" :disabled="!tagAvailable"></waitting-btn>
</div>

不过这种方法过于繁琐,setTagAvailable方法要被多个监听器处理。可以考虑用@Watch checkedRepositories 和 tagName, 根据二者的变化分别调用setTagAvailable(), 不过vue并没有提供可以同时侦听多个变量的功能(在这个阶段他们不打算实现 vue4.x)。所以考虑使用compute功能。
compute的对象在对象变化的时候就会进行计算,对象不变化,多次调用也不会重新计算。

代码:
删掉前头的ts代码,

get tagAvailable(): boolean{  //方法名直接作为vue里的调用对象
        return !!(this.checkedRepositories.length > 0 && this.tagName !== "")
    }

vue 删掉多选框和输入框的监听属性:

 <div id="tag-block">
            <span>Select Code Repositories to Release:</span>
            <div v-for="repo in gitRepositories" :key="repo">
                <input type="checkbox" :id="repo" :value="repo" v-model="checkedRepositories"
                       />{{repo}}
<!--                @change="setTagAvailable"-->
            </div>
            <span>Tag name for this release: </span>
            <div class="tag-name"><input type="text" v-model="tagName" required="required"

                                         placeholder="Enter Tag Name"/></div>
<!--            @keyup="setTagAvailable"-->
            <p class="sample-text"> Sample: v2.20180412.01 </p>
            <waitting-btn btn-class="button-unis color-white vertical-align" @click="triggerTagJob"
                          :value="'Build'"
                          :is-loading="loading" :disabled="!tagAvailable"></waitting-btn>
</div>

相关文章

网友评论

      本文标题:Typescript 里的getter 如何应用于vue

      本文链接:https://www.haomeiwen.com/subject/lxfcoctx.html