typescript CSV字符串 - >多行字符串

.ts
let csv = 'apple, , oranges,,bananas';
let multiline = csv.split(',').map(v => v.trim()).filter(Boolean).join('\n');

typescript Javascript If else Simplified / Vue.js getter / Computed

Javascript If else Simplified _ Vue.js getter_Computed
var y = (x == 2 ? "yes" : "no");

Vue.js getter/Computed

get dialogTitle() {
    return this.eventInformation
      ? String(
          this.$t('hours.entry.titleUpdate') +
            ' ' +
            format(this.selectedDate, 'DD.MMMM YYYY'),
        )
      : String(
          this.$t('hours.entry.titleCreate') +
            ' ' +
            format(this.selectedDate, 'DD.MMMM YYYY'),
        );
  }

typescript 在Reactive Forms中添加控件

ts
			this.selectForm.addControl(`select${index}`, this.fb.control(''));
		this.selectForm.addControl('studentsWithNotifications', this.fb.control(false));

typescript 为嵌套数组增加了值

db.ts
public getRaceChangesFromLastRace() {

    let raceChanges: RaceMessage[] = [];

    return new Promise<any>((resolve, reject) => {
      this.db.executeSql(Constants.SQL_RACE_CHANGES_LAST_RACE(), []).then(rs => {

        for(let i = 0; i < rs.rows.length; i++) {
          let raceNum: number = rs.rows.item(i).RaceNum;
          let message: string = rs.rows.item(i).Message;

          let s:RaceMessage;
          if (s = _.find(raceChanges, ['RaceNum', raceNum])) {
            s.Message.push(message); //push message to existing RaceID
          } else {
            raceChanges.push({'RaceNum': raceNum, 'Message': [ message ]}); //push new item
          }
        }

        resolve(raceChanges);
      })
    });
  }

typescript 按选择显示警报

ts
			this.filteredAlerts = this.optionsForSubTheme[this.optionsForSubTheme.findIndex(x => x.index == event.optionIndex)].messageInfo;

typescript 正规化

normalize.ts
const normalize = (val: number, max: number, min: number) =>
  (val - min) / (max - min);

typescript 在活动表单中循环所有表单控件

ts
 Object.keys(formGroup.controls).forEach((key) => {
        formGroup.get(key).markAsDirty();
    });

typescript 清除验证

要将验证错误重置为null,必须在构造函数中实现具有dependecy ChangeDetectorRef的AfterContentChecked生命周期钩子

ts-1
onClear() {
		this.requestForm.get('selectForPrimaryThemeOptions').setErrors(null)
		this.requestForm.get('selectForSecondaryThemeOptions').setErrors(null)
		this.requestForm.get('selectForSubThemeOptions').setErrors(null)
		this.requestForm.get('selectForChooseExamDateOptions').setErrors(null)
		this.requestForm.get('selectForChooseQuizOptions').setErrors(null)
		this.requestForm.get('textarea').setErrors(null)
		return false;
	}
ts-2
	constructor(@Inject(DOCUMENT) private document: Document, private fb: FormBuilder, private cdref: ChangeDetectorRef) {}


ngAfterContentChecked() {
		this.cdref.detectChanges()
	}

typescript 基本浅层渲染测试

这只是一个基本的单个断言测试套件,浅层呈现一个名为“AppComponent”的组件。您可以将其用作测试的基础。

app.component.spec.ts
import { Shallow } from 'shallow-render';
import { AppComponent } from './app.component';
import { AppModule } from './app.module';

describe('AppComponent', () => {
  let shallow: Shallow<AppComponent>;

  beforeEach(() => {
    shallow = new Shallow(AppComponent, AppModule);
  });

  it('should create', async () => {
    const { element } = await shallow.render();
    expect(element.nativeElement).toBeTruthy();
  });

});

typescript 当条目列表菜单未显示时,取消注释这些代码

from-db.ts
public getLastEntryRaceDate() : Promise<any> {
    return new Promise<any>((resolve, reject) => {
      this.db.executeSql(Constants.SQL_LAST_ENTRY_DATE(), []).then(async rs => {
        let entryDate = null;
        if (rs.rows.length >= 1) {
          // console.log("getLastRaceDate" + JSON.stringify(rs.rows.item(i)));
          entryDate = rs.rows.item(0).RaceDate;
        }

        if(entryDate == null) {
          entryDate = await this.getLastEntryRaceDateOld();
        }
        resolve(entryDate);
      }, err => {
        reject(err);
      });
      // resolve('2019-02-20');
    });
  }
to-db.ts
public getLastEntryRaceDate() : Promise<any> {
    return new Promise<any>((resolve, reject) => {
      // this.db.executeSql(Constants.SQL_LAST_ENTRY_DATE(), []).then(async rs => {
      //   let entryDate = null;
      //   if (rs.rows.length >= 1) {
      //     // console.log("getLastRaceDate" + JSON.stringify(rs.rows.item(i)));
      //     entryDate = rs.rows.item(0).RaceDate;
      //   }

      //   if(entryDate == null) {
      //     entryDate = await this.getLastEntryRaceDateOld();
      //   }
      //   resolve(entryDate);
      // }, err => {
      //   reject(err);
      // });
      resolve('2019-03-10');
    });
  }