# 实现Notes功能
<template>
<div>
{{value}}
<label class="formItem">
<span class="name">备注</span>
<input type="text" :value="value" @input="value = $event.target.value" placeholder="输入备注">
// 使用 v-model 代替 :value 和 @input
<input type="text" v-model="value" placeholder="输入备注">
</label>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import {Component} from 'vue-property-decorator';
@Component
export default class Notes extends Vue {
value = '';
}
</script>
# 实现NumberPad功能
<script lang="ts">
import Vue from 'vue';
import {Component} from 'vue-property-decorator';
@Component
export default class NumberPad extends Vue {
output = '0';
inputContent(event: MouseEvent){
const button = (event.target as HTMLButtonElement);
const input = button.textContent!;
if(this.output.length === 16){ return;}
// 判断0的情况,若输出为0,则将0替换为input;若不为0则追加
if(this.output === '0'){
if('0123456789'.indexOf(input)>=0){
this.output = input;
}else{
this.output += input;
}
return;
}
// 判断 . 的情况,存在一个小数点,再添加无效
if(this.output.indexOf('.') >= 0 && input === '.'){return;}
this.output += input;
}
remove(){
if(this.output.length === 1){
this.output = '0';
}else{
this.output = this.output.slice(0,-1);
}
}
clear(){
this.output = '0';
}
ok(){}
}
</script>
# EventTarget 强制指定类型
event.target.textContent; 存在问题:
1) Object is possibly 'undefined'
2) Propery textContent does not exist on type EventTarget
解决措施:先对event.target 进行判断
if(event.target){
console.log(event.target.textContent);
}
问题:Propery textContent does not exist on type EventTarget
解决措施:强制指定类型
if(event.target){
console.log((event.target as HTMLButtonElement).textContent);
}
// 简化
inputContent(event:MouseEvent){
const button = (event.target as HTMLButtonElement);
console.log(button.textContent);
}
!表示 排除 as 类型 为空之外的所有情况,即不为空,去除null、undefined
const input = button.textContent!;
// 等同
const input = button.textContent as string;
# String.prototype.slice()
提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串。
str.slice(beginIndex[, endIndex])
//slice() 提取的新字符串包括beginIndex但不包括 endIndex。
var str1 = 'The morning is upon us.', // str1 的长度 length 是 23。
str2 = str1.slice(1, 8),
str3 = str1.slice(4, -2),
str4 = str1.slice(12),
str5 = str1.slice(30);
console.log(str2); // 输出:he morn
console.log(str3); // 输出:morning is upon u
console.log(str4); // 输出:is upon us.
console.log(str5); // 输出:""
# String.prototype.substr()
返回一个字符串中从指定位置开始到指定字符数的字符。
str.substr(start[, length])
// start开始提取字符的位置;length 提取的字符数
var str = "abcdefghij";
console.log("(1,2): " + str.substr(1,2)); // (1,2): bc
console.log("(-3,2): " + str.substr(-3,2)); // (-3,2): hi
console.log("(-3): " + str.substr(-3)); // (-3): hij
console.log("(1): " + str.substr(1)); // (1): bcdefghij
console.log("(-20, 2): " + str.substr(-20,2)); // (-20, 2): ab
console.log("(20, 2): " + str.substr(20,2)); // (20, 2):
# String.prototype.substring()
返回一个字符串在开始索引到结束索引之间的一个子集, 或从开始索引直到字符串的末尾的一个子集。 substring 提取从 indexStart 到 indexEnd(不包括)之间的字符
如果 indexStart 等于 indexEnd,substring 返回一个空字符串。
如果省略 indexEnd,substring 提取字符一直到字符串末尾。
如果任一参数小于 0 或为 NaN,则被当作 0。
如果任一参数大于 stringName.length,则被当作 stringName.length。
如果 indexStart 大于 indexEnd,则 substring 的执行效果就像两个参数调换了一样。
var anyString = "Mozilla";
// 输出 "Moz"
console.log(anyString.substring(0,3));
console.log(anyString.substring(3,0));
console.log(anyString.substring(3,-3));
console.log(anyString.substring(3,NaN));
console.log(anyString.substring(-2,3));
console.log(anyString.substring(NaN,3));
// 输出 "lla"
console.log(anyString.substring(4,7));
console.log(anyString.substring(7,4));
// 输出 ""
console.log(anyString.substring(4,4));
// 输出 "Mozill"
console.log(anyString.substring(0,6));
// 输出 "Mozilla"
console.log(anyString.substring(0,7));
console.log(anyString.substring(0,10));