在AngularJs中大写字符串的第一个字母


134

我想在angularjs中大写字符串的第一个字符

当我用{{ uppercase_expression | uppercase}}它转换整个字符串为大写。



11
也可以使用CSS来完成。.检查文本转换:大写属性
Ramanathan Muthuraman

1
如果您确实想使用angular,可以使用此解决方案:codepen.io/WinterJoey/pen/sfFaK
Yousef_Shamshoum 2015年

1
创建一个简单的指令/过滤器,使您的单词首字母大写...
Pankaj Parkar 2015年

Answers:


234

使用此大写过滤器

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>


11
如果您不小心将数字大写,则会出现错误。函数的主体应为:return (angular.isString(s) && s.length > 0) ? s[0].toUpperCase() + s.substr(1).toLowerCase() : s;。如果不是字符串,则将其保持不变。
加巴2015年

2
这是自定义大写过滤器代码pen.io/WinterJoey/pen/sfFaK
Michal,

148

我会说不要使用angular / js,因为您可以简单地使用css代替:

在您的CSS中,添加类:

.capitalize {
   text-transform: capitalize;
}

然后,只需将表达式(例如ex)包装在html中:

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

不需要js;)


7
此转换将大写每个单词的首字母,因此仅适用于
单个

22
@ jakub.g如果您只想将第一个单词(大写,字母)大写,只需使用:first-letter伪元素选择器扩展CSS选择器。还有什么发现的吗?:)
Philzen

2
@Philzen是的!仅使用html怎么办?;-)
罗曼·文森特

@RomainVincent“仅HTML”是什么意思?也许我下面的回答会有所帮助(只需单击“运行代码段”以查看其运行情况)。HTML内容是静态的,您至少需要分别添加一些CSS或JS来修改其样式(分别是DOM内容)。
Philzen

4
对不起,这是在开玩笑的错误尝试。
罗曼·文森特

57

如果使用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>

请注意,文本大写如何仅更改每个单词的首字母,而其他任何字母的大小写均不受影响。


快速简便地实现目标的方法,这也将字符串中每个单词的首字母大写,这很酷。
kisanme '17

这只是在幕后使用text-transform: capitalize;
cameck

27

如果您使用的是Angular 4+,则可以使用 titlecase

{{toUppercase | titlecase}}

不必编写任何管道。


4
这是一个错误的答案-问题要求将字符串的首字母大写,而不是每个单词的首字母大写。
亚历克斯·彼得斯


18

如果您追求性能,请尝试避免使用AngularJS过滤器,因为每个表达式对它们应用两次以检查其稳定性。

更好的方法是将CSS ::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>


1
不幸的是,::first-letter它不适用于display: inlinedisplay: flex,仅适用于display:blockinline-block元素
jakub.g

18

我喜欢@TrampGuy的回答

CSS总是(不是总是如此)是更好的选择,因此: text-transform: capitalize;当然是要走的路。

但是,如果您的内容全部以大写开头怎么办?如果您尝试text-transform: capitalize;使用“ FOO BAR”之类的内容,您仍将在显示屏上看到“ FOO BAR”。要解决该问题,您可以将text-transform: capitalize;CSS 放在您的CSS中,但也可以小写您的字符串,因此:

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

我们在使用@TrampGuy的大写类的地方:

.capitalize {
  text-transform: capitalize;
}

因此,假装foo.awsome_property通常会打印“ FOO BAR”,它将现在打印所需的“ Foo Bar”。


14

如果要从字符串中大写每个单词(进行中->进行中),则可以使用像这样的数组。

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


9

对于Angular 2及更高版本,您可以使用{{ abc | titlecase }}

检查Angular.io API以获取完整列表。


1
这是一个错误的答案-问题要求将字符串的首字母大写,而不是每个单词的首字母大写。
亚历克斯·彼得斯

7

.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>


3

对于来自meanjs.org的AngularJS,我将自定义过滤器放置在 modules/core/client/app/init.js

我需要一个自定义过滤器来将句子中的每个单词都大写,这是我的做法:

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(" ");

}
});

地图功能归功于@Naveen raj



2

如果您不想建立自定义过滤器,则可以直接使用

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

2
var app = angular.module("app", []);
app.filter('capitalize', function() {
    return function(str) {
        if (str === undefined) return; // avoid undefined
        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;
    }
});

2
尽管此代码段可能是解决方案,但包括说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
Peacetype '18年

1

为了增加对此问题的看法,我将自己使用自定义指令。

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;
        });
    }
};

声明后,您可以按以下方式放入HTML内;

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

1

相反,如果您想将句子的每个单词都大写,则可以使用此代码

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(' '); 
  }
});

然后只需将过滤器“ capitalize”添加到您的字符串输入中,例如-{{name | 大写}}


0

在Angular 4或CLI中,您可以创建如下的PIPE:

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;
  }
}

0

Angular具有“ titlecase”,可将字符串中的第一个字母大写

例如:

envName | titlecase

将显示为EnvName

与插值一起使用时,请避免所有空格

{{envName|titlecase}}

并且envName的值的第一个字母将以大写形式显示。


1
这不会为上述答案提供任何价值
Ivan Kaloyanov

1
这是一个错误的答案-问题要求将字符串的首字母大写,而不是每个单词的首字母大写。
亚历克斯·彼得斯

0
if (value){
  value = (value.length > 1) ? value[0].toUpperCase() + value.substr(1).toLowerCase() : value.toUpperCase();
}



-2

除了Nidhish的答案,

对于使用AngularJ并希望将字符串中每个单词的首字母大写的人,请使用以下代码:

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

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

app.filter('titlecase', function() {
    return function(input) {
      //Check for valid string
      if(angular.isString(input) && input.length > 0) {
        var inputArray = input.split(' ');
        for(var i=0; i<inputArray.length; i++) {
          var value = inputArray[i];
          inputArray[i] =  value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
        }
        return inputArray.join(' ');
      } else {
        return 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 | titlecase}}</p>
    </div>
</div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.