#angularjs #angular #angular-forms #angular-upgrade #angular2-form-validation
#angularjs #angular #angular-forms #angular-обновление #angular2-проверка формы
Вопрос:
Я обновляю приложение AngularJS до Angular5.
Я переношу некоторые компоненты из AngularJS в Angular5, но не все другие окна приложения, которые используют ng-form для проверки формы.
<div class="form-group">
<ng-form name="accForm" novalidate>
<account ng-model="$ctrl.cccValue" label="ACC:" name="ccc"></account>
</ng-form>
<pre>
VALUE {{ accForm.ccc.$modelValue }}<br>
ACC VALID: {{accForm.ccc.$valid}} <br>
ACC ERRORS: {{accForm.ccc.$error}} <br>
FORM VALID: {{accForm.$valid}} <br>
FORM ERRORS: {{accForm.$error}} <br>
FORM {{ accForm | json }} <br>
</pre>
</div>
Я могу без проблем перехватить «form.account.$modelValue», но если я использую пользовательскую проверку для установки статуса учетной записи, я никогда не получаю ошибку в form.account.$valid или form.$valid.
Пример:
import { LqpaccountComponent } from './../../../account/account/account.component';
import { downgradeComponent } from '@angular/upgrade/static';
import * as angular from 'angular';
export function AccountStub() {
angular.module('architecture')
// downgrade component
.directive('AccountDowngraded', downgradeComponent({ component: AccountComponent }) as angular.IDirectiveFactory)
// create stub
.component('Account', {
bindings: {
name: '@',
required: '=?ngRequired',
disabled: '=?ngDisabled',
},
template: `
<account-downgraded
[name]='$ctrl.name'
ng-model='$ctrl.cccValue'
[required]='$ctrl.required'
[disabled]='$ctrl.disabled'
>
</lqp-ccc-downgraded>
`,
controller: function () {
},
});
}
Ответ №1:
Хорошо, я, наконец, нашел обходной путь. Внутри моего AccountComponent я выдаю «hasErrorChange»
Затем я использую Angular Element идентификатор элемента для получения значения
template: `
<account-downgraded
[name]='$ctrl.name'
name="{{$ctrl.name}}"
ng-form
ng-model='$ctrl.cccValue'
[required]='$ctrl.required'
[disabled]='$ctrl.disabled'
[id]="$ctrl.id"
(has-error-change)="$ctrl.hasErrorChange(value)"
>
</lqp-ccc-downgraded>
`,
controller: function () {
var _this = this;
_this.hasErrorChange = function (value) {
angular.element(document.getElementById(_this.id)).scope()[_this.name].$setValidity('myError', !value)
}
},