Milhares de maneiras de esfolar esse gato. Sei que você está perguntando entre {{}} especificamente, mas para outros que vêm aqui, acho que vale a pena mostrar algumas das outras opções.
função no seu escopo $ (IMO, esta é sua melhor aposta na maioria dos cenários):
app.controller('MyCtrl', function($scope) {
$scope.foo = 1;
$scope.showSomething = function(input) {
return input == 1 ? 'Foo' : 'Bar';
};
});
<span>{{showSomething(foo)}}</span>
ng-show e ng-hide, é claro:
<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>
Um filtro personalizado, como sugeriu Bertrand. (esta é sua melhor escolha se você tiver que fazer a mesma coisa repetidamente)
app.filter('myFilter', function() {
return function(input) {
return input == 1 ? 'Foo' : 'Bar';
}
}
{{foo | myFilter}}
Ou uma diretiva personalizada:
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>
Pessoalmente, na maioria dos casos, eu usaria uma função no meu escopo, ela mantém a marcação bastante limpa e é rápida e fácil de implementar. A menos que você faça a mesma coisa repetidas vezes, nesse caso, eu iria com a sugestão de Bertrand e criaria um filtro ou possivelmente uma diretiva, dependendo das circunstâncias.
Como sempre, o mais importante é que sua solução seja fácil de manter e esperamos que seja testável. E isso vai depender completamente da sua situação específica.