Я пытаюсь создать индикатор выполнения, значение прогресса которого вычисляется с помощью простой функции в файле углового контроллера, а затем отправляется в элемент html в атрибут стиля.
Вот часть файла AngularJS:
var statusMock = {
installmentProgress: {
current: '2',
outOf: '4'
}
}
var installmentProgressBarLength = ((statusMock.installmentProgress.current / statusMock.installmentProgress.outOf).toString() * 100);
ctrl.progressValue = 'progresValue={width:' + installmentProgressBarLength + '%}';
И вот часть файла HTML:
<div class="tile-policy-payments__installments-progress__progressbar" >
<div class="tile-policy-payments__installments-progress__progressbar_value" ng-style="{{ctrl.progressValue}}"></div>
</div>
Проблема заключается в символе "%" в определении ctrl.progressValue. Это вызывает ошибку:
Error: [$parse:syntax] Syntax Error: Token '}' not a primary expression at column 24 of the expression [progresValue={width:50%}] starting at [}].
Если я не использую символ "%", все работает нормально, однако длина индикатора выполнения не является той, которую я ожидаю.
Будем благодарны за помощь в решении проблемы. С уважением
Вам нужно изменить две вещи, чтобы заставить ее работать. При установке переменной в JS вы должны установить ее непосредственно для объекта:
ctrl.progressValue = { width: installmentProgressBarLength + '%' };
Вторая часть меняет привязку:
ng-style="ctrl.progressValue"
Обратите внимание, что нет никаких фигурных скобок вокруг значения. Это потому, что то, что вы действительно хотите передать в ng-style, является объектом, а не представлением JSON этого объекта.
ng-style
но вы пробовалиctrl.progressValue = 'width:' + installmentProgressBarLength + '%'
вместоctrl.progressValue = 'progresValue={width:' + installmentProgressBarLength + '%}'