Il y a des milliers de façons d'aborder ce sujet. Je réalise que votre question concerne spécifiquement les {{}}, mais pour les autres qui viennent ici, je pense qu'il est utile de montrer certaines des autres options.
sur votre $scope (IMO, c'est votre meilleure chance dans la plupart des scénarios) :
app.controller('MyCtrl', function($scope) {
$scope.foo = 1;
$scope.showSomething = function(input) {
return input == 1 ? 'Foo' : 'Bar';
};
});
<span>{{showSomething(foo)}}</span>
ng-show et ng-hide bien sûr :
<span ng-show="foo == 1">Foo</span><span ng-hide="foo == 1">Bar</span>
ngSwitch
<div ng-switch on="foo">
<span ng-switch-when="1">Foo</span>
<span ng-switch-when="2">Bar</span>
<span ng-switch-default>What?</span>
</div>
Un filtre personnalisé comme le suggère Bertrand. (c'est votre meilleur choix si vous devez faire la même chose encore et encore)
app.filter('myFilter', function() {
return function(input) {
return input == 1 ? 'Foo' : 'Bar';
}
}
{{foo | myFilter}}
Ou une directive personnalisée :
app.directive('myDirective', function() {
return {
restrict: 'E',
replace: true,
link: function(scope, elem, attrs) {
scope.$watch(attrs.value, function(v) {
elem.text(v == 1 ? 'Foo': 'Bar');
});
}
};
});
<my-directive value="foo"></my-directive>
Personnellement, dans la plupart des cas, j'opterais pour une fonction sur mon champ d'application, ce qui permet de garder le balisage assez propre, et c'est rapide et facile à mettre en œuvre. À moins que vous ne fassiez exactement la même chose encore et encore, auquel cas je suivrais la suggestion de Bertrand et créerais un filtre ou éventuellement une directive, selon les circonstances.
Comme toujours, le plus important est que votre solution soit facile à maintenir. et j'espère qu'elle pourra être testée. Et cela va dépendre complètement de votre situation spécifique.
6 votes
S'il vous plaît désaccepter ma réponse et accepter 2Toad's quand vous avez une chance.