2015-05-13 6 views
108

ich erste Zeichen der Zeichenkette in AngularJSCapitalize den ersten Buchstaben der Zeichenfolge in AngularJS

nutzen möchten Wie ich {{ uppercase_expression | uppercase}} verwendet es ganze String in Großbuchstaben umwandeln.

+1

Ja, Sie müssen etwas Code schreiben. Angular wird nicht alles für dich tun. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/String/toUpperCase –

+10

Dies kann mit CSS auch getan werden .. Überprüfen Sie die Text-Transform: Großbuchstaben Eigenschaft –

+1

Sie können diese Lösung verwenden, wenn Sie wirklich angular verwenden möchten: http://codepen.io/WinterJoey/pen/ sfFaK –

Antwort

199

Verwendung dieses kapitalisieren Filter

var app = angular.module('app', []); 
 

 
app.controller('Ctrl', function ($scope) { 
 
    $scope.msg = 'hello, world.'; 
 
}); 
 

 
app.filter('capitalize', function() { 
 
    return function(input) { 
 
     return (!!input) ? input.charAt(0).toUpperCase() + input.substr(1).toLowerCase() : ''; 
 
    } 
 
});
<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>

+9

Sie erhalten eine Fehlermeldung, wenn Sie eine Nummer versehentlich groß schreiben möchten. Der Rumpf der Funktion sollte folgendes sein: 'return (angular.isString (s) && s.length> 0)? s [0] .toUpperCase() + sstr (1) .toLowerCase(): s; '. Wenn es keine Zeichenfolge ist, geben Sie sie unverändert zurück. – Jabba

+1

besser aktualisieren Sie die Antwort mit @ Jabbas Kommentar. –

+1

Hier ist der benutzerdefinierte Großschreibung Filter geschrieben https://codepen.io/WinterJoey/pen/sfFaK – user321

21

eine schönere Art und Weise

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

Es funktioniert, aber es gibt einen Fehler: TypeError: Kann die Eigenschaft 'charAt' von undefined bei Großbuchstaben.filter.js: 3 nicht lesen bei fn (eval bei (Angularjs: 14432), : 4: 216) bei regularInterceptedExpression (Angularjs: 15622) bei expressionInputWatch (Angularjs: 15527). bei Scope $ Digest (Angularjs : 17064) bei Scope gilt $ (Angularjs. 17337) auf fertig (Angularjs: 11572) bei completeRequest (Angularjs: 11778) bei XMLHttpRequest.requestLoaded (Angularjs: 11711) –

13

, wenn Sie jedes Wort aus Zeichenfolge nutzen wollen (in progress -> In Progress) können Sie benutze ein Array wie dieses.

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

dank Was ich gerade mache need – Sae

3

Für die AngularJS von meanjs.org lege ich die benutzerdefinierten Filter in modules/core/client/app/init.js

ich einen benutzerdefinierten Filter benötigt, um jedes Wort in einem Satz zu nutzen, ist hier, wie ich so:

angular.module(ApplicationConfiguration.applicationModuleName).filter('capitalize', function() { 
return function(str) { 
    return str.split(" ").map(function(input){return (!!input) ? input.charAt(0).toUpperCase() + input.substr(1).toLowerCase() :   ''}).join(" "); 

} 
}); 

der Kredit der Karte Funktion geht raj

15

@Naveen Wenn Sie nach Leistung sind, versuchen Sie es mit AngularJS Filter zu vermeiden, da sie für jeden expre zweimal angewendet werden um nach ihrer Stabilität zu suchen.

Ein besserer Weg wäre die Verwendung von CSS ::first-letter Pseudo-Element mit text-transform: uppercase;. Das kann jedoch nicht für Inline-Elemente wie span verwendet werden, also wäre die nächste beste Sache, text-transform: capitalize; für den ganzen Block zu verwenden, der jedes Wort groß schreibt.

Beispiel:

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>

+0

Leider funktioniert ':: first-letter' nicht bei' display: inline' oder 'display: flex', nur bei' display: block' oder 'inline-block' Elementen –

1

Nur meine eigenen Gedanken über dieses Thema zu schreiben, würde ich eine benutzerdefinierte mich Richtlinie;

app.directive('capitalization', function() { 
return { 
    require: 'ngModel', 
    link: function (scope, element, attrs, modelCtrl) { 

     modelCtrl.$parsers.push(function (inputValue) { 

      var transformedInput = (!!inputValue) ? inputValue.charAt(0).toUpperCase() + inputValue.substr(1).toLowerCase() : ''; 

      if (transformedInput != inputValue) { 
       modelCtrl.$setViewValue(transformedInput); 
       modelCtrl.$render(); 
      } 

      return transformedInput; 
     }); 
    } 
}; 

Sobald deklariert können Sie in Ihrem HTML wie folgt platzieren;

<input ng-model="surname" ng-trim="false" capitalization> 
112

Ich benutze keine Winkel/js sagen würde, wie Sie einfach CSS stattdessen verwenden können:

in Ihrem CSS, fügen Sie die Klasse:

.capitalize { 
    text-transform: capitalize; 
} 

Dann wickeln einfach die Ausdruck (zB) in Ihrem html:

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

Keine js benötigt;)

+6

Diese Transformation wird *** *** zuerst großgeschrieben Buchstabe jedes Wortes *** gilt also nur für Ein-Wort-Strings –

+15

@ jakub.g Wenn Sie nur das erste Wort (gut, Buchstaben) groß schreiben möchten, erklären Sie einfach den CSS-Selektor mit dem ': First-Letter'-Pseudo -Element Auswahl. Sonst noch etwas aufgedeckt? :) – Philzen

+1

@Philzen Ja! Wie würdest du es nur mit HTML machen? ;-) –

13

Ich mag die Antwort von @TrampGuy

CSS ist immer (naja, nicht immer) eine bessere Wahl, also: text-transform: capitalize; ist sicherlich der Weg zu gehen.

Aber was ist, wenn Ihr Inhalt nur aus Großbuchstaben besteht? Wenn Sie text-transform: capitalize; auf Inhalt wie "FOO BAR" versuchen, erhalten Sie immer noch "FOO BAR" in Ihrem Display. Um das zu umgehen diese Frage könnten Sie die text-transform: capitalize; in Ihrem CSS setzen, sondern auch Ihre Zeichenfolge klein geschrieben, so:

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

wo wir verwenden @ TrampGuy der kapitalisieren Klasse:

.capitalize { 
    text-transform: capitalize; 
} 

So vorgibt, dass foo.awsome_property würde normalerweise "FOO BAR" drucken, wird jetzt die gewünschte "Foo Bar" gedruckt.

1

Stattdessen, wenn Sie jedes Wort eines Satzes profitieren wollen, dann können Sie diesen Code verwenden

app.filter('capitalize', function() { 


return function(input, scope) { 
if (input!=null) 
input = input.toLowerCase().split(' '); 

for (var i = 0; i < input.length; i++) { 
    // You do not need to check if i is larger than input length, as your for does that for you 
    // Assign it back to the array 
    input[i] = input[i].charAt(0).toUpperCase() + input[i].substring(1);  


} 
    // Directly return the joined string 
    return input.join(' '); 
    } 
}); 

und nur Filter hinzufügen „kapitalisieren“, um Ihre String-Eingang, für die Ex - {{name | kapitalisieren}}

6

.capitalize { 
 
    display: inline-block; 
 
} 
 

 
.capitalize:first-letter { 
 
    font-size: 2em; 
 
    text-transform: capitalize; 
 
}
<span class="capitalize"> 
 
    really, once upon a time there was a badly formatted output coming from my backend, <strong>all completely in lowercase</strong> and thus not quite as fancy-looking as could be - but then cascading style sheets (which we all know are <a href="http://9gag.com/gag/6709/css-is-awesome">awesome</a>) with modern pseudo selectors came around to the rescue... 
 
</span>

39

Wenn Sie Bootstrap verwenden, können Sie einfach die text-capitalize Helper-Klasse hinzufügen:

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

Schnelle und einfache Möglichkeit, um das Ziel zu erreichen, auch dies Großbuchstaben Anfangsbuchstaben jedes Wortes in der Zeichenfolge, die cool ist. – kisanme

+0

sehr guter Trick –

+0

Link ist tot !!! – r3wt

2

Wenn Sie benutzerdefinierte Filter nicht wollen, bauen, dann können Sie verwenden Sie direkt

{{ foo.awesome_property.substring(0,1) | uppercase}}{{foo.awesome_property.substring(1)}} 
0

Sie hinzufügen können Funktionalität Laufzeit nutzen wie:

<td>{{lastName.charAt(0).toUpperCase()+ lastName.substr(1).toLowerCase()}}</td> 
-1

{{ uppercase_expression | capitaliseFirst}}

0

in Angular 4 oder CLI arbeiten sollten Sie eine PIPE wie folgt erstellen:

import { Pipe, PipeTransform } from '@angular/core'; 
@Pipe({ 
    name: 'capitalize' 
}) 
/** 
* Place the first letter of each word in capital letters and the other in lower case. Ex: The LORO speaks = The Loro Speaks 
*/ 
export class CapitalizePipe implements PipeTransform { 
    transform(value: any): any { 
    value = value.replace(' ', ' '); 
    if (value) { 
     let w = ''; 
     if (value.split(' ').length > 0) { 
     value.split(' ').forEach(word => { 
      w += word.charAt(0).toUpperCase() + word.toString().substr(1, word.length).toLowerCase() + ' ' 
     }); 
     } else { 
     w = value.charAt(0).toUpperCase() + value.toString().substr(1, value.length).toLowerCase(); 
     } 
     return w; 
    } 
    return value; 
    } 
} 
6

Für Angular 2 und höher, können Sie Verwenden Sie {{ abc | titlecase }}.

Überprüfen Sie Angular.io API für die vollständige Liste.

3

Dies ist ein weiterer Weg:

{{some_str | limitTo:1 | uppercase}}{{some_str.substr(1) | lowercase }} 
0
var app = angular.module("app", []); 
app.filter('capitalize', function() { 
    return function(str) { 
     str = str.toLowerCase().split(" "); 
     var c = ''; 
     for (var i = 0; i <= (str.length - 1); i++) { 
      var word = ' '; 
      for (var j = 0; j < str[i].length; j++) { 
       c = str[i][j]; 
       if (j === 0) { 
        c = c.toUpperCase(); 
       } 
       word += c; 
      } 
      str[i] = word; 
     } 
     str = str.join(''); 
     return str; 
    } 
}); 
+0

Während dieses Code-Snippet die Lösung sein kann, [einschließlich einer Erklärung] (// meta.stackexchange.com/questions/114762/code-based-declarations-declaring) hilft wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – peacetype

1

Wenn Sie Angular 4 verwenden, dann können Sie nur titlecase

{{toUppercase | titlecase}} 

haben keine Leitungen schreiben verwenden.