Почему Angular AOT компилируется, даже когда шаблоны обращаются к закрытым свойствам?

Прежде всего, я хотел бы сказать, что я совершенно новичок в Ionic, а также в Angular. Простите меня за любой глупый вопрос или комментарий.

Что ж, я провожу некоторые тесты, чтобы лучше понять, как компилятор AOT работает с Angular и Ionic.

Я столкнулся с такой ситуацией, когда у меня есть компонент с закрытыми полями, к которым есть доступ в моем шаблоне, но сборка работает отлично. Насколько я понял, это должно вызвать ошибку.

@IonicPage()
@Component({
selector: 'page-login',
templateUrl: 'login.html',
})
export class LoginPage {

private username : string;

private password : string;  

//etc etc
}

Мой шаблон ссылается на поля следующим образом:

<ion-input [(ngModel)]="username" name="username" type="text" required>
<ion-input [(ngModel)]="password" name="password" type="password" required>

Затем я запускаю команду ниже, и ошибка не появляется:

ionic build --prod

Running app-scripts build: --prod
[22:13:51]  build prod started ... 
[22:13:51]  clean started ... 
[22:13:51]  clean finished in 1 ms 
[22:13:51]  copy started ... 
[22:13:51]  deeplinks started ... 
[22:13:51]  deeplinks finished in 44 ms 
[22:13:51]  ngc started ... 
[22:13:57]  ngc finished in 5.39 s 
[22:13:57]  preprocess started ... 
[22:13:57]  preprocess finished in less than 1 ms 
[22:13:57]  webpack started ... 
[22:13:57]  copy finished in 5.66 s 
[22:14:23]  webpack finished in 25.97 s 
[22:14:23]  uglify started ... 
[22:14:23]  sass started ... 
[22:14:24]  sass finished in 1.35 s 
[22:14:24]  cleancss started ... 
[22:14:25]  cleancss finished in 1.22 s 
[22:14:37]  uglify finished in 14.13 s 
[22:14:37]  postprocess started ... 
[22:14:37]  postprocess finished in 13 ms 
[22:14:37]  lint started ... 
[22:14:37]  build prod finished in 45.69 s 

Я обнаружил открытую проблему в Angular github с такой же ситуацией: https://github.com/angular/angular/issues/14739.

В этой проблеме сообщалось, что ошибка появляется только при запуске ngc во второй раз, потому что при первом запуске ngc генерирует ngfactories и только при втором запуске пытается преобразовать эти factory в Javascript, а затем обнаруживает проблему.

marlon@marlon-dell-5480 ~/ $ node_modules/.bin/ngc
marlon@marlon-dell-5480 ~/ $ node_modules/.bin/ngc
src/pages/login/login.ngfactory.ts:234:32: Property 'username' is private and only accessible within class 'LoginPage'.

Эта ситуация может стать проблемой, если кто-то в команде забудет какое-то приватное поле и молча сломает сборку AOT.

Столкнулся с таким сценарием:

  • Почему AOT не сообщает об ошибках при запуске ionic build?
  • Нужно ли мне настроить какие-либо настройки, чтобы ошибка отображалась ionic-cli?
  • Были ли какие-либо изменения в AOT в отношении использования закрытых полей, доступ к которым осуществляется в шаблоне?

person Marlon Patrick    schedule 06.11.2017    source источник


Ответы (1)


У вас есть альтернатива здесь. То есть вы можете легко увидеть эти ошибки, если установите < strong>Angular Language Service расширение.

В HTML-коде:

введите здесь описание изображения

Раздел проблем с кодом VS:

введите здесь описание изображения

person Sampath    schedule 06.11.2017