2017-01-21 4 views
1

Итак, у меня есть тройной операторский тест в моем угловом коде JS, чтобы определить, какую переменную использовать на повторном блоке, но этот тест выполняется много раз внутри него, и я думаю, что это глупо. Есть ли способ сохранить результат выражения в переменной и использовать его вместо повторения выражения?Тернарный оператор переменный в angularJS

Код:

<tr ng-repeat="meta in metas"> 
    <td class="mdl-data-table__cell--non-numeric"> 
     {{meta.admMetNome}} <span class="pull-right">{{meta.pagCidadesPagCid[0].pagCidId ? usuarios[meta.pagCidadesPagCid[0].pagCidId].qtd : usuarios['total'].qtd}}/{{meta.admMetValor}}</span> 
     <md-progress-linear md-mode="determinate" value="{{(meta.pagCidadesPagCid[0].pagCidId ? usuarios[meta.pagCidadesPagCid[0].pagCidId].qtd : usuarios['total'].qtd) * 100/meta.admMetValor}}"></md-progress-linear> 
     {{(meta.pagCidadesPagCid[0].pagCidId ? usuarios[meta.pagCidadesPagCid[0].pagCidId].qtd : usuarios['total'].qtd) * 100/meta.admMetValor | number:2}}% - Prazo: de {{meta.admMetInicio | date: 'dd/MM/yyyy'}} a {{meta.admMetFim | date: 'dd/MM/yyyy'}} 
    </td> 
</tr> 
+1

бы быть хорошим примером использования директивы или компонента. Извлекла бы бизнес-логику из представления – charlietfl

ответ

1

Что-то вроде этого в вашем контроллере должно делать трюк (при условии, что «usuarios» - это scoped var). Но, как предложил @charlietfl, это была бы хорошая возможность для директивы.

$scope.assignValue = function(meta) { 
    return (meta.pagCidadesPagCid[0].pagCidId) ? usuarios[meta.pagCidadesPagCid[0].pagCidId].qtd : usuarios.total.qtd * (100/meta.admMetValor); 
}; 
<tr ng-repeat="meta in metas"> 
    <td class="mdl-data-table__cell--non-numeric"> 
    {{meta.admMetNome}} <span class="pull-right">{{meta.pagCidadesPagCid[0].pagCidId ? usuarios[meta.pagCidadesPagCid[0].pagCidId].qtd : usuarios['total'].qtd}}/{{meta.admMetValor}}</span> 
    <md-progress-linear md-mode="determinate" value="assignValue(meta)"> 
    </md-progress-linear> 
    {{(meta.pagCidadesPagCid[0].pagCidId ? usuarios[meta.pagCidadesPagCid[0].pagCidId].qtd : usuarios['total'].qtd) * 100/meta.admMetValor | number:2}}% - Prazo: de {{meta.admMetInicio | date: 'dd/MM/yyyy'}} a {{meta.admMetFim | date: 'dd/MM/yyyy'}} 
    </td> 
</tr> 
1

В объекте контроллера или $scope создать функцию с параметром, чтобы передать ваши meta в нем. Мне нравится getValue(meta). И просто return ваш тернарный оператор в нем. Затем просто используйте эту функцию в выражении: value={{$ctrl.getValue(meta)}}.