AngularJs dizgisinin ilk harfini büyük yaz


134

Angularjs'de dizenin ilk karakterini büyük harfle yazmak istiyorum

Kullandığım {{ uppercase_expression | uppercase}}gibi tüm dizeyi büyük harfe dönüştürür.



11
Bu aynı zamanda CSS kullanılarak da yapılabilir .. Metin dönüşümüne göz atın: capitalize property
Ramanathan Muthuraman

1
Gerçekten açısal kullanmak istiyorsanız bu çözümü kullanabilirsiniz: codepen.io/WinterJoey/pen/sfFaK
Yousef_Shamshoum

1
sizin için kelime sermaye ilk harfini yapacak basit bir yönerge / filtre oluşturmak ...
Pankaj Parkar

Yanıtlar:


234

bu büyük harfli filtreyi kullan

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
Bir sayıyı yanlışlıkla büyük harfle yazmak istiyorsanız hata alıyorsunuz. Fonksiyonun gövdesi bu şekilde olmalıdır: return (angular.isString(s) && s.length > 0) ? s[0].toUpperCase() + s.substr(1).toLowerCase() : s;. Bir dize değilse, değiştirmeden geri gönderin.
Jabba

2
İşte özel büyük harf filtresi codepen.io/WinterJoey/pen/sfFaK
Michal

148

Sadece css kullanabilirsiniz gibi açısal / js kullanmayın söyleyebilirim:

Css'nize sınıfı ekleyin:

.capitalize {
   text-transform: capitalize;
}

Ardından, ifadeyi (ex için) html'nize sarın:

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

Js gerekmez;)


7
Bu dönüşüm, Her Kelimenin İlk
Harfini büyük harfe çevirecektir

22
@ jakub.g Sadece ilk kelimeyi büyük harfle yazmak istiyorsanız (iyi, harf), css seçiciyi :first-lettersözde eleman seçicisiyle dışarı atın . Açıkta kalan başka bir şey var mı? :)
Philzen

2
@Fhilzen Evet! Sadece html ile nasıl yapardınız? ;-)
Romain Vincent

@RomainVincent "Yalnızca HTML" ile ne demek istiyorsun? Belki de aşağıdaki cevabım yardımcı olur (eylemde görmek için "Kod snippet'ini çalıştır" ı tıklamanız yeterlidir). HTML içeriği statiktir, en azından stilini ve DOM içeriğini değiştirmek için bazı CSS veya JS atmanız gerekir.
Philzen

4
Üzgünüm, bu şaka yapmak için kötü bir girişimdi.
Romain Vincent

57

Bootstrap kullanıyorsanız , text-capitalizeyardımcı sınıfı ekleyebilirsiniz :

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

EDIT: bağlantının tekrar ölmesi durumunda:

Metin Dönüşümü

Metin büyük / küçük harf sınıflarıyla bileşenlerdeki metni dönüştürün.

küçük harfli metin.
BÜYÜK METİN.
CapiTaliZed Metin.

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

Metinde büyük harf kullanımını her kelimenin yalnızca ilk harfini nasıl değiştirdiğini ve diğer harflerin durumlarını etkilemediğini unutmayın.


Hedefe ulaşmanın hızlı ve kolay yolu, bu da dizedeki her kelimenin ilk harfini büyük yapar, bu da serindir.
kisanme

perde arkasında bu sadece kullanıyortext-transform: capitalize;
cameck

27

Angular 4+ kullanıyorsanız titlecase

{{toUppercase | titlecase}}

boru yazmak zorunda değilsiniz.


4
Bu yanlış bir cevaptır - soru, her kelimenin ilk harfini değil, dizenin ilk harfini büyük yazmayı ister.
Alex Peters

23

daha güzel bir yol

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

18

Performans peşindeyseniz, kararlılıklarını kontrol etmek için her ifade başına iki kez uygulandığından AngularJS filtrelerini kullanmaktan kaçının.

Daha iyi bir yol, CSS ::first-lettersözde öğesini kullanmaktır text-transform: uppercase;. Bu gibi satır içi öğelerde kullanılamaz span, bu yüzden bir sonraki en iyi şey text-transform: capitalize;, her kelimeyi büyük harfle kullanan tüm blokta kullanmak olacaktır .

Misal:

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
Maalesef ::first-letterüzerinde çalışmaya değil display: inlineya display: flexsadece üzerinde, display:blockya da inline-blockelemanlar
jakub.g

18

@TrampGuy tarafından verilen cevabı beğendim

CSS her zaman (her zaman değil) daha iyi bir seçimdir, bu yüzden: text-transform: capitalize;kesinlikle gitmenin yolu.

Peki ya içeriğiniz başlangıçta büyük harf içeriyorsa? text-transform: capitalize;"FOO BAR" gibi içerikleri denerseniz , yine de ekranınızda "FOO BAR" ifadesini görürsünüz. Bu sorunu text-transform: capitalize;çözmek için css'inize koyabilirsiniz , ancak dizenizi küçük harflerle yazabilirsiniz.

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

@ TrampGuy'un büyük harf sınıfını kullanıyoruz:

.capitalize {
  text-transform: capitalize;
}

Yani, foo.awsome_propertynormalde "FOO BAR" yazıyormuş gibi yapmak, şimdi istenen "Foo Bar" yazdıracaktır.


14

dizeden her sözcüğü büyük harfle kullanmak istiyorsanız (devam ediyor -> Devam Ediyor), böyle bir diziyi kullanabilirsiniz.

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

11

Bu başka bir yol:

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

9

Açısal 2 ve üstü için kullanabilirsiniz {{ abc | titlecase }}.

Tam liste için Angular.io API'sini kontrol edin .


1
Bu yanlış bir cevaptır - soru, her kelimenin ilk harfini değil, dizenin ilk harfini büyük yazmayı ister.
Alex Peters

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 sitesindeki AngularJS için özel filtreleri modules/core/client/app/init.js

Bir cümledeki her kelimeyi büyük harf yapmak için özel bir filtreye ihtiyacım vardı, işte böyle yapıyorum:

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

}
});

Harita işlevinin kredisi @Naveen raj



2

Özel filtre oluşturmak istemiyorsanız doğrudan kullanabilirsiniz

{{ 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
Bu kod snippet'i çözüm olsa da, bir açıklama da dahil olmak üzere mesajınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
peacetype

1

Sadece bu konuyla ilgili kendi görüşümü eklemek için, kendim için özel bir yönerge kullanırdım;

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

Bir kez ilan Html içine aşağıdaki gibi yerleştirebilirsiniz;

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

1

Bunun yerine, bir cümlenin her bir kelimesini büyük harfle yazmak istiyorsanız, bu kodu kullanabilirsiniz

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

ve sadece dize girişinize "büyük harf" filtresi ekleyin, örneğin ex - {{name | }} Yararlanmak


0

Açısal 4 veya CLI'de şöyle bir BORU oluşturabilirsiniz:

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

Açısal, bir dizgideki ilk harfi büyük yapan 'titlecase' özelliğine sahiptir

Örneğin:

envName | titlecase

EnvName olarak görüntülenecek

İnterpolasyon ile birlikte kullanıldığında,

{{envName|titlecase}}

envName değerinin ilk harfi büyük harfle yazdırılır.


1
Bu, yukarıdaki cevaba herhangi bir değer sağlamaz
Ivan Kaloyanov

1
Bu yanlış bir cevaptır - soru, her kelimenin ilk harfini değil, dizenin ilk harfini büyük yazmayı ister.
Alex Peters

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

-1

Büyük / küçük harf işlevselliği çalışma süresini şu şekilde ekleyebilirsiniz:

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


-2

Nidhish'in cevabına ek olarak,

AngularJs kullandığınız ve dizedeki her sözcüğün ilk harfini büyük yazmak isteyen kişiler için aşağıdaki kodu kullanın:

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.