Угловое 4 - необходимо отобразить сообщение об ошибке из директивы в родительский компонент

Этот один лайнер работает для папок, содержащих пробелы или специальные символы (например, ç или õ). Исходный вопрос задает абсолютный путь (рабочий каталог) без самого файла JAR. Протестировано здесь с Java7 на Windows7:

String workingDir = System.getProperty("user.dir");

Ссылка: http://www.mkyong.com/java/how-to-get-the-current-working-directory-in -java /

0
задан Vin 13 July 2018 в 06:26
поделиться

1 ответ

Попробуйте это Решение

directive.ts

import { Directive, ElementRef, HostListener, Input, Output, EventEmitter } from '@angular/core';

@Directive({
  selector: '[OnlyNumber],[tabText]'
})

export class OnlyNumber {

  regexStr = '^[0-9]*$';
  //regexStr = ".*[^0-9].*";
  constructor(private el: ElementRef) { }

  @Input() OnlyNumber: boolean;
  @Output() tabText: boolean;
  @Output() itch: EventEmitter<any> = new EventEmitter();
  @Output() warning: EventEmitter<any> = new EventEmitter();
  /// our click is a representation of a scratch
  @HostListener('onClick') onClick() {
    ///We are emitting itchies!!
    /* this.itch.emit('itch itch itch');
    console.log("this.itch");
    console.log(this.itch); */
  }

  @HostListener('keydown', ['$event']) onKeyDown(event) {
    let e = <KeyboardEvent>event;
    let keyCode = e.keyCode;
    if (this.OnlyNumber) {
      if (keyCode >= 96 && keyCode <= 105) {
        keyCode -= 48;
      }
      if ([46, 8, 9, 27, 13, 110, 190].indexOf(keyCode) !== -1 ||
        // Allow: Ctrl+A
        (keyCode == 65 && e.ctrlKey === true) ||
        // Allow: Ctrl+C
        (keyCode == 67 && e.ctrlKey === true) ||
        // Allow: Ctrl+V
        (keyCode == 86 && e.ctrlKey === true) ||
        // Allow: Ctrl+X
        (keyCode == 88 && e.ctrlKey === true) ||
        // Allow: home, end, left, right
        (keyCode >= 35 && keyCode <= 39)) {
        return;
      }
      let ch = String.fromCharCode(keyCode);
      let regEx = new RegExp(this.regexStr);
      if (regEx.test(ch)) {
        this.tabText = true;
        return;
      } else {
        this.warning.emit(false)
        e.preventDefault();
      }
    } else {
      this.warning.emit(false);
    }
  }

  @HostListener('blur', ['$event']) onBlur(event) {
    let e = <KeyboardEvent>event;
    if (this.OnlyNumber) {
      /* console.log("this.OnlyNumber");
      console.log(event.target.value); */
      this.tabText = false;
    }
  }
}

app.component.html:

<input (warning)="errorOutput($event)"  name="salesprice"  placeholder="Enter Number" type="text" OnlyNumber="true"  
 class="input-highlight">

приложение .component.ts:

import { Component, ViewChild } from '@angular/core';


@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  constructor() { }

  ngOnInit() {
  }

 errorOutput(event){
   if(!event){
     alert("Please Enter Number Only");
   }
 }
}
0
ответ дан UnluckyAj 17 August 2018 в 13:33
поделиться
  • 1
    Спасибо, за хорошее объяснение. Он работает, но у нас есть более 40 входов, в этом случае нам нужно применять директиву во всех входах вручную. Так что я хочу знать, есть ли другой альтернативный способ? где у нас есть что-то общее для всех полей, то есть мы можем писать что-то в одном общем месте, и это будет работать для всех. – Vin 13 July 2018 в 07:23
Другие вопросы по тегам:

Похожие вопросы: