Просто предоставив тегу input
переменную шаблона, #inputPhoneNumber
назначит объектное представление JavaScript этого HTMLElement
переменной шаблона.
Попробуйте это с помощью:
Input Field - With Just Template Varaible:
Phone number must only contain digits
Two Way Binding: {{phoneNumber}}
ViewChild Native Element: {{viewChildFirst?.nativeElement | json}}
ViewChild Control: {{viewChildFirst.control | json}}
#first: {{first?.value}}
И в классе компонентов:
@ViewChild('first') viewChildFirst;
Как совершенно очевидно, viewChildFirst.control
не будет определяться в этом случае. [ 1117]
Но при назначении ngModel
переменной шаблона будет назначено представление FormControl
этого элемента HTML переменной шаблона.
Попробуйте это с помощью:
Input Field - With Template And ngModel assigned
Phone number must only contain digits
Two Way Binding: {{phoneNumber}}
ViewChild Native Element: {{viewChildSecond?.nativeElement}}
ViewChild Conttrol: {{viewChildSecond.control | json}}
#second: {{second?.value}}
А в классе компонентов:
@ViewChild('second') viewChildSecond;
На этот раз viewChildSecond?.nativeElement
не будет определено, но viewChildSecond.control
будет. [+1121]
Вы можете проверить это, точно распечатав переменную шаблона, как я делал выше. Вот рабочий образец StackBlitz для вашей ссылки.
BLOCKQUOTE>
Проблема состоит в том что точка в
^(.*)$
не соответствует символам новой строки, но с Вашим "m"
переключатель Вы делаете "^"
и "$"
привязка к символам новой строки. Это не означает "ничто" между "\n"
и "\n"
может быть подобран успешно с "(.*)"
.
Так как это соответствие имеет нулевую ширину, lastIndex
свойство не может совершенствоваться. Попробуйте:
^(.+)$
Править: Для соответствия пустым строкам также сделайте это:
^(.*)\n? // remove all \r characters beforehand
или
^(.*)(?:\r\n|\n\r|\n|\r)? // all possible CR/LF combinations, but *once* at most
... и просто пойдите для группы 1 соответствия.
Проблема с lastIndex состоит в том, что реализация JavaScript, которая следует стандарту к букве, устанавливает его на смещение следующего символа после соответствия. Для регулярных выражений, как Ваш, который позволяет соответствия нулевой длины, должностное лицо () таким образом застрянет в бесконечном цикле, когда соответствие нулевой длины будет найдено. Следующая попытка соответствия начнется в том же положении, где то же соответствие нулевой длины найдено.
Традиционно, regex механизмы имеют дело с этим путем пропуска одного символа, когда соответствие нулевой длины найдено. Кстати, Internet Explorer делает это также.
Я вел блог об этом подробно в прошлом: Не упустите Соответствия Нулевой Длины