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.


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>


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


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.


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.


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

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>


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.


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

11

Ini adalah cara lain:

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

9

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

Periksa Angular.io API untuk daftar lengkap.


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>


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



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

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

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


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

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.


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

-1

Anda dapat menambahkan kapitalisasi fungsi saat berjalan sebagai:

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.