三元运算符以angularJS

时间:2017-01-21 13:07:48

标签: angularjs

所以我在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>

2 个答案:

答案 0 :(得分:1)

在控制器对象或$scope中创建一个带有参数的函数,以便在其中传递meta。像getValue(meta)一样。只需return你的三元运算符。然后只需在表达式中使用此函数:value={{$ctrl.getValue(meta)}}

答案 1 :(得分:1)

你的控制器中的这样的东西应该可以解决问题(假设&#39; usuarios&#39;是一个范围变量)。但是像@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>