Объявление переменной как volatile
гарантирует, что все обращения к ней фактически считывают текущее значение из памяти.
Без volatile
компилятор может оптимизировать доступ к памяти и сохранить ее значение в регистр, поэтому только первое использование переменной считывает фактическую ячейку памяти, содержащую переменную. Это проблема, если переменная изменена другим потоком между первым и вторым доступом; первый поток имеет только копию первого (предварительно измененного) значения, поэтому второй оператор if
проверяет устаревшую копию значения переменной.
Вы также можете использовать ng-шаблон для подтверждения ввода и отключения кнопки на недействительном шаблоне.
Самый простой способ проверить пробелы, это обрезать значение ввода.
if(regForm.username.trim())
Это условие верно, если результат отличается от пустой строки.
С уважением.