杂记2

1.做一个同步读取文件的:
uploadFileSync(f: any) {
return new Promise((fulfill, reject) => {
const rd = new FileReader();
rd.onload = async (r) => {
const datas = new Uint8Array(r.target['result']);
fulfill(datas);
}
rd.readAsArrayBuffer(f);
rd.onerror = (r) => {
reject(null);
};
});
}

这个方法可以被等待。
async aa () {
for (const f of this._fileInput.nativeElement.files) {
const datas = await this.uploadFileSync(f);
if (datas) {
let index = -1;
for (let i = 0; i < exts.length; i++) {
if (f.name.endsWith(exts[i])) {
index = i;
break;
}
}
if(index >= 0 && index < exts.length) {
fileContent[index] = datas as any[];
}
} else {
this.msgBox.showError('GLOBAL.ULF');
break;
}
}
}

这样就可以了,看关键代码,其它代码无需看。
2.注意,使用一个{datas:5}这样来做一个新的对象,即使使用
{datas:5} as Person也会丢失掉Person的其它信息,比如speck()方法等。因此,最好使用new Person()来使用,这样不会丢失信息。
3.二维数组,在序列化的时候,可能会出错。因此,使用一个
[ProtoContract]
public class BytesPack
{
[ProtoMember(1)]
public byte[] Datas;
}
来代替即可,将二维数组扁平化为对象的一维数组即可。
3.angular中,select控件的比较好的使用方法:

注意:select中的ngModel绑定的变量,其实是option的ngvalue或者value值,而不是显示出来的值(当然,你不写ngvalue或者value的值的话,那么就是默认是显示的值)。ngvalue可以绑定任何值,而value只能是字符串。
因此,我们可以灵活使用value和ngvalue来绑定了。
注意,如果在select的时候,要影响其它变量,那么就可以做一个属性,即带有get,set的,这样在set的时候可以改变其它值。
private _ttt: any;
get tttt() {
return this._ttt;
}
set tttt(value: any) {
this._ttt = value;
}

注意,change只是一个事件而已,这个事件只是选择改变的时候发生。
也可以做成select取名,然后使用rr.value来使用,不过感觉有点不爽,还是完全使用数据绑定和数据驱动较好

动态改变select的选项,那么使用

这样比较好,改变数组就改变了值。而使用









好像不太成功

你可能感兴趣的:(杂记2)