Сделать первую букву строки в AngularJs заглавной

Я хочу использовать первый символ строки в angularjs с заглавной буквы

Поскольку я использовал {{ uppercase_expression | uppercase}}, он преобразует всю строку в верхний регистр.


person Piyush    schedule 13.05.2015    source источник
comment
Да, вам придется написать код. Angular не сделает за вас всего. developer.mozilla.org/en-US/ docs / Web / JavaScript / Reference /, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/   -  person JB Nizet    schedule 13.05.2015
comment
Это также можно сделать с помощью CSS. Проверьте свойство text-transform: capitalize   -  person Ramanathan Muthuraman    schedule 13.05.2015
comment
Вы можете использовать это решение, если действительно хотите использовать angular: codepen.io/WinterJoey/pen/sfFaK   -  person Yousef_Shamshoum    schedule 13.05.2015
comment
создайте простую директиву / фильтр, которая сделает для вас заглавную первую букву слова ...   -  person Pankaj Parkar    schedule 13.05.2015


Ответы (21)


используйте этот фильтр с заглавными буквами

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>

person Nidhish Krishnan    schedule 13.05.2015
comment
Вы получите сообщение об ошибке, если захотите написать число с заглавной буквы случайно. Тело функции должно быть таким: return (angular.isString(s) && s.length > 0) ? s[0].toUpperCase() + s.substr(1).toLowerCase() : s;. Если это не строка, верните ее без изменений. - person Jabba; 05.12.2015
comment
Здесь написан настраиваемый фильтр капитализации codepen.io/WinterJoey/pen/sfFaK - person Mike; 06.03.2017

Я бы сказал, не используйте angular / js, так как вместо этого вы можете просто использовать css:

В свой css добавьте класс:

.capitalize {
   text-transform: capitalize;
}

Затем просто оберните выражение (например) в свой html:

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

Никаких js не требуется;)

person TrampGuy    schedule 05.04.2016
comment
Это преобразование будет начинаться с заглавной буквы Первая буква каждого слова, поэтому применимо только к строкам из одного слова. - person jakub.g; 02.08.2016
comment
@ jakub.g Если вы просто хотите использовать первое слово (ну, букву) с заглавной буквы, просто расширьте селектор CSS с помощью селектора псевдоэлементов :first-letter. Что-нибудь еще осталось открытым? :) - person Philzen; 24.08.2016
comment
@Philzen Да! Как бы вы сделали это только с html? ;-) - person Romain Vincent; 11.02.2017
comment
@RomainVincent Что вы имеете в виду под HTML? Возможно, мой ответ ниже поможет (просто нажмите Запустите фрагмент кода, чтобы увидеть его в действии). HTML-контент статичен, вам, по крайней мере, нужно будет добавить немного CSS или JS, чтобы изменить его стиль, соответственно содержимое DOM. - person Philzen; 09.03.2017
comment
Извините, это была неудачная попытка пошутить. - person Romain Vincent; 09.03.2017
comment
Как правило, это хорошая идея, но если я хочу продолжить обработку строки с заглавной буквы с помощью Angular, JavaScript / Angular все равно будет рассматривать ее как строку без заглавной буквы. - person Lea Reimann; 10.03.2019

Если вы используете Bootstrap, вы можете просто добавить _ 1_ вспомогательный класс:

<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 изменяет только первую букву каждого слова, оставляя регистр любых других букв неизменным.

person minimalpop    schedule 01.09.2016
comment
Быстрый и простой способ достичь цели, также это делает первую букву каждого слова в строке заглавной, что здорово. - person kisanme; 17.04.2017
comment
за кулисами это просто использование text-transform: capitalize; - person cameck; 19.01.2018

Если вы используете Angular 4+, вы можете просто использовать titlecase

{{toUppercase | titlecase}}

не нужно писать трубы.

person Abhishek Ekaanth    schedule 20.02.2018
comment
Это неправильный ответ - в вопросе предлагается использовать первую букву строки с заглавной буквы, а не первую букву каждого слова. - person Alex Peters; 06.11.2018

лучший способ

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

Мне нравится ответ от @TrampGuy

CSS всегда (ну, не всегда) лучший выбор, поэтому: text-transform: capitalize;, безусловно, лучший вариант.

Но что, если ваш контент для начала написан прописными буквами? Если вы попробуете text-transform: capitalize; на таком контенте, как «FOO BAR», вы все равно получите «FOO BAR» на вашем дисплее. Чтобы обойти эту проблему, вы можете поместить text-transform: capitalize; в свой css, но также строчные буквы в строке, поэтому:

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

где мы используем класс capitalize @ TrampGuy:

.capitalize {
  text-transform: capitalize;
}

Итак, делая вид, что foo.awsome_property обычно печатает «FOO BAR», теперь он напечатает желаемый «Foo Bar».

person Ryan Crews    schedule 07.04.2016

Если вам нужна производительность, старайтесь избегать использования фильтров 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>

person Gregor Eesmaa    schedule 04.01.2016
comment
К сожалению, ::first-letter не работает с display: inline или display: flex, только с display:block или inline-block элементами - person jakub.g; 02.08.2016

если вы хотите использовать каждое слово в строке с заглавной буквы (в процессе -> в процессе), вы можете использовать такой массив.

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

Это еще один способ:

{{some_str | limitTo:1 | uppercase}}{{some_str.substr(1) | lowercase }}
person pallav deshmukh    schedule 01.11.2017

Для Angular 2 и выше вы можете использовать {{ abc | titlecase }}.

Полный список см. В Angular.io API.

person windmaomao    schedule 25.08.2017
comment
Это неправильный ответ - в вопросе предлагается использовать первую букву строки с заглавной буквы, а не первую букву каждого слова. - person Alex Peters; 06.11.2018

Для AngularJS от meanjs.org я помещаю настраиваемые фильтры в 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

person Maxim Mai    schedule 08.12.2015

В angular 7+ со встроенным pipe

{{ yourText | titlecase  }}
person Ahmad Sharif    schedule 01.03.2020

Если вы не хотите создавать собственный фильтр, вы можете напрямую использовать

{{ foo.awesome_property.substring(0,1) | uppercase}}{{foo.awesome_property.substring(1)}}
person Kshitij    schedule 23.03.2017

Чтобы добавить свой собственный взгляд на эту проблему, я бы сам использовал настраиваемую директиву;

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>
person uk2k05    schedule 15.02.2016

Вместо этого, если вы хотите использовать каждое слово в предложении с заглавной буквы, вы можете использовать этот код

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

person Akash Saxena    schedule 20.06.2016

в 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;
  }
}
person eberlast    schedule 03.07.2017

Angular имеет 'titlecase', который делает первую букву в строке заглавной.

Например:

envName | titlecase

будет отображаться как EnvName

При использовании с интерполяцией избегайте всех пробелов, например

{{envName|titlecase}}

и первая буква значения envName будет напечатана в верхнем регистре.

person Vedha Peri    schedule 23.07.2018
comment
Это не придает никакого значения приведенному выше ответу. - person Ivan Kaloyanov; 23.07.2018
comment
Это неправильный ответ - в вопросе предлагается использовать первую букву строки с заглавной буквы, а не первую букву каждого слова. - person Alex Peters; 06.11.2018

Вы можете попробовать разделить строку на две части и управлять их делом по отдельности.

{{ (Name.charAt(0) | uppercase) + "" + (Name.slice(1, element.length) | lowercase) }}

or

{{ Name.charAt(0) | uppercase }} {{ Name.slice(1, element.length) | lowercase  }}
person Pritesh    schedule 14.09.2020

Вы можете добавить заглавные буквы во время выполнения как:

<td>{{lastName.charAt(0).toUpperCase()+ lastName.substr(1).toLowerCase()}}</td>
person Rahul Mankar    schedule 13.04.2017

{{ uppercase_expression | capitaliseFirst}} должно работать

person Hasan Shaik    schedule 19.05.2017

person    schedule
comment
Хотя этот фрагмент кода может быть решением, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причины вашего предложения кода. - person peacetype; 20.01.2018