Gunakan huruf besar dalam string pertama dalam AngularJs

134

Saya ingin menggunakan karakter pertama dari string dalam angularjs

Seperti yang saya gunakan {{ uppercase_expression | uppercase}}itu mengkonversi seluruh string ke huruf besar.

Piyush
sumber
1
Ya, Anda harus menulis beberapa kode. Angular tidak akan melakukan segalanya untuk Anda. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… , developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
JB Nizet
11
Ini dapat dilakukan dengan menggunakan CSS juga .. Lihat teks-transform: capitalize properti
Ramanathan Muthuraman
1
Anda dapat menggunakan solusi ini jika Anda benar-benar ingin menggunakan sudut: codepen.io/WinterJoey/pen/sfFaK
Yousef_Shamshoum
1
buat arahan / filter sederhana yang akan membuat huruf pertama dari kata modal untuk Anda ...
Pankaj Parkar

Jawaban:

234

gunakan filter kapital ini

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>

Nidhish Krishnan
sumber
11
Anda mendapatkan kesalahan jika Anda ingin menggunakan huruf besar nomor secara tidak sengaja. Tubuh fungsi harus ini: return (angular.isString(s) && s.length > 0) ? s[0].toUpperCase() + s.substr(1).toLowerCase() : s;. Jika bukan string maka kembalikan tidak berubah.
Jabba
2
Di sini tertulis filter kapitalisasi kustom codepen.io/WinterJoey/pen/sfFaK
Michal
148

Saya akan mengatakan jangan gunakan angular / js karena Anda bisa menggunakan css sebagai gantinya:

Di css Anda, tambahkan kelas:

.capitalize {
   text-transform: capitalize;
}

Kemudian, cukup bungkus ekspresi (misalnya) dalam html Anda:

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

Tidak dibutuhkan js;)

TrampGuy
sumber
7
Transformasi ini akan menggunakan Huruf Pertama Dari Setiap Kata sehingga hanya berlaku untuk string satu kata
jakub.g
22
@ jakub.g Jika Anda hanya ingin menggunakan huruf besar untuk kata pertama (yah, huruf), cukup gunakan selektor css dengan :first-letterselektor elemen pseudo. Ada lagi yang belum ditemukan? :)
Philzen
2
@ Pilzen Ya! Bagaimana Anda melakukannya dengan html saja? ;-)
Romain Vincent
@ DomainVincent Apa yang Anda maksud dengan "hanya HTML"? Mungkin jawaban saya di bawah ini membantu (klik saja "Jalankan cuplikan kode" untuk melihatnya beraksi). Konten HTML bersifat statis, Anda setidaknya harus memasukkan beberapa CSS atau JS untuk memodifikasi gaya, masing-masing konten DOM.
Philzen
4
Maaf, itu adalah upaya yang buruk untuk membuat lelucon.
Romain Vincent
57

Jika Anda menggunakan Bootstrap , Anda bisa menambahkan text-capitalizekelas helper:

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

EDIT: kalau-kalau tautannya mati lagi:

Transformasi Teks

Mengubah teks dalam komponen dengan kelas kapitalisasi teks.

teks dengan huruf kecil.
TEKS DATANG.
Teks CapiTaliZed.

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

Perhatikan bagaimana menggunakan huruf besar teks hanya mengubah huruf pertama dari setiap kata, sehingga kasing huruf lainnya tidak terpengaruh.

minimalpop
sumber
Cara cepat dan mudah untuk mencapai tujuan, juga huruf kapital pertama dari setiap kata dalam string, yang keren.
kisanme
di belakang layar ini hanya menggunakantext-transform: capitalize;
cameck
27

Jika Anda menggunakan Angular 4+ maka Anda bisa menggunakannya titlecase

{{toUppercase | titlecase}}

tidak perlu menulis pipa.

Abhishek Ekaanth
sumber
4
Ini adalah jawaban yang salah — pertanyaannya meminta untuk menggunakan huruf besar dari string, bukan huruf pertama dari setiap kata.
Alex Peters
23

cara yang lebih baik

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

Jika Anda mengejar kinerja, coba hindari menggunakan filter AngularJS karena diterapkan dua kali per setiap ekspresi untuk memeriksa stabilitasnya.

Cara yang lebih baik adalah dengan menggunakan ::first-letterelemen pseudo- CSS dengan text-transform: uppercase;. Itu tidak dapat digunakan pada elemen inline seperti span, jadi hal terbaik berikutnya adalah menggunakan text-transform: capitalize;seluruh blok, yang menggunakan huruf kapital setiap kata.

Contoh:

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>

Gregor Eesmaa
sumber
1
Sayangnya ::first-lettertidak bekerja pada display: inlineatau display: flex, hanya pada display:blockatau inline-blockelemen
jakub.g
18

Saya suka jawaban dari @ TrampGuy

CSS selalu (baik, tidak selalu) pilihan yang lebih baik, jadi: text-transform: capitalize; tentu saja cara untuk pergi.

Tetapi bagaimana jika konten Anda semua huruf besar untuk memulai? Jika Anda mencoba text-transform: capitalize;konten seperti "FOO BAR" Anda masih akan mendapatkan "FOO BAR" di layar Anda. Untuk menyiasatinya, Anda bisa memasukkan text-transform: capitalize;css Anda, tetapi juga merender string Anda, jadi:

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

tempat kami menggunakan kelas huruf besar @ TrampGuy:

.capitalize {
  text-transform: capitalize;
}

Jadi, berpura-pura yang foo.awsome_propertybiasanya mencetak "FOO BAR", sekarang akan mencetak "Foo Bar" yang diinginkan.

Ryan Crews
sumber
14

jika Anda ingin menggunakan huruf kapital dari setiap kata dari string (sedang berlangsung -> Sedang Berlangsung), Anda dapat menggunakan larik seperti ini.

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

Ini adalah cara lain:

{{some_str | limitTo:1 | uppercase}}{{some_str.substr(1) | lowercase }}
pallav deshmukh
sumber
9

Untuk Angular 2 ke atas, Anda dapat menggunakan {{ abc | titlecase }}.

Periksa Angular.io API untuk daftar lengkap.

windmaomao
sumber
1
Ini adalah jawaban yang salah — pertanyaannya meminta untuk menggunakan huruf besar dari string, bukan huruf pertama dari setiap kata.
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>

Philzen
sumber
3

Untuk AngularJS dari meanjs.org, saya menempatkan filter khusus modules/core/client/app/init.js

Saya membutuhkan filter khusus untuk menggunakan huruf besar setiap kata dalam sebuah kalimat, berikut ini caranya:

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

}
});

Kredit dari fungsi peta pergi ke @Naveen raj

Maxim Mai
sumber
3

Di sudut 7+ yang memiliki pipa bawaan

{{ yourText | titlecase  }}
Ahmad Sharif
sumber
2

Jika Anda tidak ingin membuat filter khusus maka Anda dapat menggunakannya secara langsung

{{ foo.awesome_property.substring(0,1) | uppercase}}{{foo.awesome_property.substring(1)}}
Chhitij Srivastava
sumber
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;
    }
});
murali2486
sumber
2
Sementara cuplikan kode ini mungkin solusinya, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
Peacetype
1

Hanya untuk menambahkan pendapat saya sendiri tentang masalah ini, saya akan menggunakan arahan khusus sendiri;

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

Setelah dideklarasikan, Anda dapat menempatkan di dalam Html Anda seperti di bawah ini;

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

Alih-alih jika Anda ingin menggunakan huruf besar untuk setiap kata dalam sebuah kalimat, Anda dapat menggunakan kode ini

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

dan tambahkan saja filter "capitalize" ke input string Anda, untuk ex - {{name | huruf besar}}

Akash Saxena
sumber
0

di Angular 4 atau CLI Anda dapat membuat PIPE seperti ini:

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;
  }
}
eberlast
sumber
0

Angular memiliki 'titlecase' yang mengkapitalisasi huruf pertama dalam sebuah string

Misalnya:

envName | titlecase

akan ditampilkan sebagai EnvName

Saat digunakan dengan interpolasi, hindari semua spasi seperti

{{envName|titlecase}}

dan huruf pertama dari nilai envName akan dicetak dalam huruf besar.

Vedha Peri
sumber
1
Ini tidak memberikan nilai apa pun untuk jawaban di atas
Ivan Kaloyanov
1
Ini adalah jawaban yang salah — pertanyaannya meminta untuk menggunakan huruf besar dari string, bukan huruf pertama dari setiap kata.
Alex Peters
0
if (value){
  value = (value.length > 1) ? value[0].toUpperCase() + value.substr(1).toLowerCase() : value.toUpperCase();
}
Ali
sumber
-1

Anda dapat menambahkan kapitalisasi fungsi saat berjalan sebagai:

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

{{ uppercase_expression | capitaliseFirst}} harus bekerja

Hasan Shaik
sumber
-2

Menambah jawaban Nidhish,

Untuk orang-orang yang Anda gunakan AngularJs dan ingin menggunakan huruf kapital pertama dari setiap kata dalam string, gunakan kode di bawah ini:

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>

Pankaj
sumber