我希望在AngularJS中将字符串的第一个字符大写。
当我使用{{ uppercase_expression | uppercase }}
时,它会将整个字符串转换为大写字母。
我希望在AngularJS中将字符串的第一个字符大写。
当我使用{{ uppercase_expression | uppercase }}
时,它会将整个字符串转换为大写字母。
使用 capitalize 过滤器
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>
return (angular.isString(s) && s.length > 0) ? s[0].toUpperCase() + s.substr(1).toLowerCase() : s;
如果不是字符串,则返回未更改的值。 - Jabba我建议不要使用Angular/JS,因为您可以直接使用CSS:
在您的CSS中添加该类:
.capitalize {
text-transform: capitalize;
}
然后,只需在你的HTML中包装表达式(例如):
<span class="capitalize">{{ uppercase_expression }}</span>
无需 JavaScript ;)
:first-letter
伪元素选择器扩展 CSS 选择器。还有其他需要解决的问题吗? :) - Philzen如果您使用Bootstrap,您可以简单地添加text-capitalize
帮助类:
<p class="text-capitalize">CapiTaliZed text.</p>
编辑:以防链接再次失效:
文本转换
使用文本大小写类在组件中转换文本。
小写字母文本。
大写字母文本。
首字母大写文本。
<p class="text-lowercase">Lowercased text.</p>
<p class="text-uppercase">Uppercased text.</p>
<p class="text-capitalize">CapiTaliZed text.</p>
请注意,text-capitalize仅更改每个单词的第一个字母,而不影响任何其他字母的大小写。
text-transform: capitalize;
。 - cameck如果你正在使用 Angular 4+,那么你只需要使用 titlecase
。
{{toUppercase | titlecase}}
不需要写任何管道符。
一个更好的方式
app.filter('capitalize', function() {
return function(token) {
return token.charAt(0).toUpperCase() + token.slice(1);
}
});
我喜欢@TrampGuy的回答。
CSS通常(虽然不总是)是更好的选择,因此:text-transform: capitalize;
肯定是正确的方法。
但是,如果您的内容一开始就全部是大写的呢?如果您在像“FOO BAR”这样的内容上尝试使用text-transform: capitalize;
,则在显示中仍将得到“FOO BAR”。为了解决这个问题,您可以将text-transform: capitalize;
放入您的css中,同时将字符串转换为小写,因此:
<ul>
<li class="capitalize">{{ foo.awesome_property | lowercase }}</li>
</ul>
在这里,我们正在使用@TrampGuy的大写类:
.capitalize {
text-transform: capitalize;
}
所以,假装 foo.awsome_property
通常会打印 "FOO BAR",现在它将打印期望的 "Foo Bar"。
::first-letter
伪元素并使用text-transform: uppercase;
。但是,这不能用于像span
这样的内联元素,所以下一个最好的选择是在整个块上使用text-transform: capitalize;
,这将使每个单词的首字母大写。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>
::first-letter
在 display: inline
或 display: flex
上不起作用,只能在 display:block
或 inline-block
元素上使用。 - jakub.g如果你想将字符串中的每个单词都大写(例如“in progress”变成“In Progress”),你可以使用以下数组。
.filter('capitalize', function() {
return function(input) {
return (!!input) ? input.split(' ').map(function(wrd){return wrd.charAt(0).toUpperCase() + wrd.substr(1).toLowerCase();}).join(' ') : '';
}
});
这是另一种方式:
{{some_str | limitTo:1 | uppercase}}{{some_str.substr(1) | lowercase }}
对于 Angular 2 及以上版本,您可以使用 {{ abc | titlecase }}
。
请查看 Angular.io API 以获取完整列表。