javascript - Capitalizar a primeira letra de uma string no AngularJs
Eu quero capitalizar o primeiro caractere de uma string no AngularJS
Como usei {{ uppercase_expression | uppercase}}, ele converte toda a string para maiúsculas.
Resposta #1
use este filtro de maiúsculas
var app = angular.module('app', []);
app.controller('Ctrl', function ($scope) {
$scope.msg = 'hello, world.';
});
app.filter('capitalize', function() {
return function(input) {
return (angular.isString(input) && input.length > 0) ? input.charAt(0).toUpperCase() + input.substr(1).toLowerCase() : input;
}
});<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="Ctrl">
<p><b>My Text:</b> {{msg | capitalize}}</p>
</div>
</div>Resposta #2
Eu diria para não usar angular/js, pois você pode simplesmente usar css em vez disso:
Em seu CSS, adicione a classe:
.capitalize {
text-transform: capitalize;
}
Então, simplesmente envolva a expressão (por exemplo) no seu HTML:
<span class="capitalize">{{ uppercase_expression }}</span>
Não é necessário JS ;)
Resposta #3
Se você usar o Bootstrap, pode simplesmente adicionar a classe auxiliar text-capitalize:
<p class="text-capitalize">CapiTaliZed text.</p>
EDITAR: só por precaução, caso o link saia do ar novamente:
Transformação de Texto
Transforme o texto em componentes com classes de capitalização de texto.
texto em letras minúsculas.
TEXTO EM LETRAS MAIÚSCULAS.
Texto Capitalizado.<p class="text-lowercase">Lowercased text.</p> <p class="text-uppercase">Uppercased text.</p> <p class="text-capitalize">CapiTaliZed text.</p>Observe como text-capitalize apenas altera a primeira letra de cada palavra, deixando o caso de quaisquer outras letras inalterado.
Resposta #4
Se você está usando Angular 4+ então você pode simplesmente usar titlecase
{{toUppercase | titlecase}}
não precisa escrever nenhum pipe.
Resposta #5
uma maneira mais agradável
app.filter('capitalize', function() {
return function(token) {
return token.charAt(0).toUpperCase() + token.slice(1);
}
});
Resposta #6
Eu gosto da resposta do @TrampGuy
CSS é sempre (bem, nem sempre) uma escolha melhor, então: text-transform: capitalize; certamente é o caminho a seguir.
Mas e se seu conteúdo já estiver todo em maiúsculas? Se você tentar text-transform: capitalize; em um conteúdo como "FOO BAR", você ainda verá "FOO BAR" na exibição. Para contornar esse problema, você poderia colocar o text-transform: capitalize; no seu CSS, mas também converter a sua string para minúsculas, assim:
<ul>
<li class="capitalize">{{ foo.awesome_property | lowercase }}</li>
</ul>
onde estamos usando a classe capitalize do @TrampGuy:
.capitalize {
text-transform: capitalize;
}
Então, fingindo que foo.awsome_property normalmente imprimiria "FOO BAR", agora ele imprimirá o desejado "Foo Bar".
Resposta #7
Se você busca desempenho, tente evitar o uso de filtros do AngularJS, pois eles são aplicados duas vezes em cada expressão para verificar sua estabilidade.
Uma maneira melhor seria usar o pseudo-elemento CSS ::first-letter com text-transform: uppercase;. No entanto, isso não pode ser usado em elementos inline como span, então a próxima melhor opção seria usar text-transform: capitalize; em todo o bloco, o que capitaliza cada palavra.
Exemplo :
var app = angular.module('app', []);
app.controller('Ctrl', function ($scope) {
$scope.msg = 'hello, world.';
});.capitalize {
display: inline-block;
}
.capitalize::first-letter {
text-transform: uppercase;
}
.capitalize2 {
text-transform: capitalize;
}<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="Ctrl">
<b>My text:</b> <div class="capitalize">{{msg}}</div>
<p><b>My text:</b> <span class="capitalize2">{{msg}}</span></p>
</div>
</div>Resposta #8
se você quiser capitalizar cada palavra de uma string (em andamento -> Em Andamento), você pode usar um array assim.
.filter('capitalize', function() {
return function(input) {
return (!!input) ? input.split(' ').map(function(wrd){return wrd.charAt(0).toUpperCase() + wrd.substr(1).toLowerCase();}).join(' ') : '';
}
});
Resposta #9
Esta é outra maneira:
{{some_str | limitTo:1 | uppercase}}{{some_str.substr(1) | lowercase }}
