javascript - Majuscularea primei litere a unui șir în AngularJs


Vreau să fac prima literă a șirului să fie cu majusculă în AngularJS

Pe măsură ce am folosit {{ uppercase_expression | uppercase}}, acesta convertește întregul șir în majuscule.

Răspuns #1

folosește acest filtru de majuscule

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>

Răspunsul #2

Aș spune să nu folosești angular/js, deoarece poți folosi pur și simplu CSS în loc:

În CSS-ul tău, adaugă clasa:

.capitalize {
   text-transform: capitalize;
}

Apoi, pur și simplu înfășurați expresia (de ex) în HTML-ul dvs:

<span class="capitalize">{{ uppercase_expression }}</span>

Nu este nevoie de JS ;)

Răspunsul #3

Dacă folosești Bootstrap, poți pur și simplu să adaugi clasa de ajutor text-capitalize:

<p class="text-capitalize">CapiTaliZed text.</p>

EDIT: doar în caz că linkul moare din nou:

Transformare text

Transformați textul în componente cu clase de capitalizare a textului.

text cu litere mici.
TEXT CU LITERE MARI.
Text Cu Majuscule.

<p class="text-lowercase">Lowercased text.</p>
<p class="text-uppercase">Uppercased text.</p>
<p class="text-capitalize">CapiTaliZed text.</p>

Observați cum text-capitalize schimbă doar prima literă din fiecare cuvânt, lăsând cazul oricărei alte litere neafectat.

Răspunsul #4

Dacă folosiți Angular 4+ atunci puteți folosi pur și simplu titlecase

{{toUppercase | titlecase}}

nu trebuie să scrii niciun țeavă.

Răspunsul #5

un mod mai plăcut

app.filter('capitalize', function() {
  return function(token) {
      return token.charAt(0).toUpperCase() + token.slice(1);
   }
});

Răspuns #6

Îmi place răspunsul de la @TrampGuy

CSS este întotdeauna (bine, nu întotdeauna) o alegere mai bună, așa că: text-transform: capitalize; este cu siguranță calea de urmat.

Dar ce te faci dacă conținutul tău este deja tot cu majuscule? Dacă încerci text-transform: capitalize; pe un conținut precum "FOO BAR" vei obține tot "FOO BAR" în afișare. Pentru a evita această problemă, poți pune text-transform: capitalize; în CSS-ul tău, dar, de asemenea, să pui șirul de caractere cu litere mici, astfel:

<ul>
  <li class="capitalize">{{ foo.awesome_property | lowercase }}</li>
</ul>

unde folosim clasa @TrampGuy's capitalize:

.capitalize {
  text-transform: capitalize;
}

Așadar, presupunând că foo.awsome_property ar tipări în mod normal „FOO BAR”, acum va tipări „Foo Bar” dorit.

Răspunsul #7

Dacă urmărești performanța, încearcă să eviți utilizarea filtrelor AngularJS, deoarece acestea sunt aplicate de două ori pentru fiecare expresie pentru a verifica stabilitatea lor.

O metodă mai bună ar fi să folosești pseudo-elementul CSS ::first-letter cu text-transform: uppercase;. Totuși, acesta nu poate fi folosit pe elemente inline, cum ar fi span, așa că următorul lucru cel mai bun ar fi să folosești text-transform: capitalize; pe întregul bloc, ceea ce capitalizează fiecare cuvânt.

Exemplu :

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>

Răspuns #8

dacă vrei să capitalizezi fiecare cuvânt din șir (în desfășurare -> În Desfășurare), poți folosi un array astfel.

.filter('capitalize', function() {
    return function(input) {
        return (!!input) ? input.split(' ').map(function(wrd){return wrd.charAt(0).toUpperCase() + wrd.substr(1).toLowerCase();}).join(' ') : '';
    }
});

Răspunsul #9

Aceasta este o altă cale:

{{some_str | limitTo:1 | uppercase}}{{some_str.substr(1) | lowercase }}