Viết hoa chữ cái đầu tiên của chuỗi trong AngularJs


134

Tôi muốn viết hoa ký tự đầu tiên của chuỗi trong angularjs

Khi tôi sử dụng {{ uppercase_expression | uppercase}}nó chuyển đổi toàn bộ chuỗi sang chữ hoa.


1
Có, bạn sẽ phải viết một số mã. Angular sẽ không làm mọi thứ cho bạn. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
Khăn

11
Điều này cũng có thể được thực hiện bằng CSS .. Hãy xem chuyển đổi văn bản: viết hoa thuộc tính
Ramanathan Muthuraman

1
Bạn có thể sử dụng giải pháp này nếu bạn thực sự muốn sử dụng angular: codepen.io/WinterJoey/pen/sfFaK
Yousef_Shamshoum

1
tạo một chỉ thị / bộ lọc đơn giản sẽ tạo chữ cái đầu tiên của vốn từ cho bạn ...
Pankaj Parkar

Câu trả lời:


234

sử dụng bộ lọc viết hoa này

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
Bạn gặp lỗi nếu bạn muốn viết hoa một số vô tình. Phần thân của hàm phải là : return (angular.isString(s) && s.length > 0) ? s[0].toUpperCase() + s.substr(1).toLowerCase() : s;. Nếu nó không phải là một chuỗi thì trả lại nó không thay đổi.
Jabba

2
Ở đây được viết bộ lọc viết hoa tùy chỉnh codepen.io/WinterJoey/pen/sfFaK
Michal

148

Tôi muốn nói không sử dụng angular / js vì bạn chỉ có thể sử dụng css thay thế:

Trong css của bạn, thêm lớp:

.capitalize {
   text-transform: capitalize;
}

Sau đó, chỉ cần bọc biểu thức (ví dụ) trong html của bạn:

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

Không cần js;)


7
Chuyển đổi này sẽ viết hoa Chữ cái đầu tiên của mỗi từ vì vậy chỉ áp dụng cho các chuỗi một từ
jakub.g

22
@ jakub.g Nếu bạn chỉ muốn viết hoa từ đầu tiên (tốt, chữ cái), chỉ cần mở rộng bộ chọn css bằng :first-letterbộ chọn phần tử giả. Còn gì để lộ nữa không? :)
Philzen

2
@Philzen Vâng! Làm thế nào bạn sẽ làm điều đó chỉ với html? ;-)
Romain Vincent

@RomainVincent Ý bạn là gì khi chỉ "HTML"? Có thể câu trả lời của tôi dưới đây có ích (chỉ cần nhấp vào "Chạy đoạn mã" để xem nó hoạt động). Nội dung HTML là tĩnh, ít nhất bạn sẽ cần đưa vào một số CSS hoặc JS để sửa đổi kiểu dáng của nó, tương ứng là nội dung DOM.
Philzen

4
Tôi xin lỗi, đó là một nỗ lực xấu trong việc làm một trò đùa.
Romain Vincent

57

Nếu bạn sử dụng Bootstrap , bạn chỉ cần thêm text-capitalizelớp trình trợ giúp:

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

EDIT: chỉ trong trường hợp liên kết chết một lần nữa:

Chuyển đổi văn bản

Chuyển đổi văn bản trong các thành phần với các lớp viết hoa văn bản.

văn bản hạ cấp.
VĂN BẢN NÂNG CẤP.
CapiTaliZed Văn bản.

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

Lưu ý cách viết hoa văn bản chỉ thay đổi chữ cái đầu tiên của mỗi từ, khiến cho trường hợp của bất kỳ chữ cái nào khác không bị ảnh hưởng.


Cách nhanh chóng và dễ dàng để đạt được mục tiêu, cũng điều này viết hoa chữ cái đầu tiên của mỗi từ trong chuỗi, thật tuyệt.
kisanme

đằng sau hậu trường này chỉ là sử dụngtext-transform: capitalize;
cameck

27

Nếu bạn đang sử dụng Angular 4+ thì bạn chỉ có thể sử dụng titlecase

{{toUppercase | titlecase}}

không phải viết bất kỳ đường ống.


4
Đây là một câu trả lời không chính xác, câu hỏi yêu cầu viết hoa chữ cái đầu tiên của chuỗi, không phải chữ cái đầu tiên của mỗi từ.
Alex Peters

23

một cách đẹp hơn

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

18

Nếu bạn đang theo đuổi hiệu suất, hãy cố gắng tránh sử dụng các bộ lọc AngularJS vì chúng được áp dụng hai lần cho mỗi biểu thức để kiểm tra tính ổn định của chúng.

Một cách tốt hơn sẽ là sử dụng ::first-letterphần tử giả CSS với text-transform: uppercase;. Tuy nhiên, điều đó không thể được sử dụng cho các yếu tố nội tuyến span, vì vậy, điều tốt nhất tiếp theo sẽ là sử dụng text-transform: capitalize;trên toàn bộ khối, vốn viết hoa mỗi từ.

Thí dụ:

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
Thật không may ::first-letter, không hoạt động trên display: inlinehoặc display: flex, chỉ trên display:blockhoặc inline-blockcác yếu tố
jakub.g

18

Tôi thích câu trả lời từ @TrampGuy

CSS luôn luôn (tốt, không phải luôn luôn) là một lựa chọn tốt hơn, vì vậy: text-transform: capitalize; chắc chắn là con đường để đi.

Nhưng nếu nội dung của bạn là chữ hoa để bắt đầu thì sao? Nếu bạn thử text-transform: capitalize;nội dung như "FOO BAR", bạn vẫn sẽ nhận được "FOO BAR" trong màn hình của mình. Để giải quyết vấn đề đó, bạn có thể đặt text-transform: capitalize;css vào, nhưng cũng viết thường chuỗi của bạn, vì vậy:

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

nơi chúng tôi đang sử dụng lớp viết hoa của @ TrampGuy:

.capitalize {
  text-transform: capitalize;
}

Vì vậy, giả vờ rằng foo.awsome_propertythường sẽ in "FOO BAR", giờ đây nó sẽ in "Foo Bar" mong muốn.


14

nếu bạn muốn viết hoa từng từ trong chuỗi (đang tiến hành -> Đang tiến hành), bạn có thể sử dụng mảng như thế này.

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

11

Đây là một cách khác:

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

9

Đối với Angular 2 trở lên, bạn có thể sử dụng {{ abc | titlecase }}.

Kiểm tra API Angular.io để biết danh sách đầy đủ.


1
Đây là một câu trả lời không chính xác, câu hỏi yêu cầu viết hoa chữ cái đầu tiên của chuỗi, không phải chữ cái đầu tiên của mỗi từ.
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

Đối với AngularJS từ meanjs.org, tôi đặt các bộ lọc tùy chỉnh vào modules/core/client/app/init.js

Tôi cần một bộ lọc tùy chỉnh để viết hoa từng từ trong câu, đây là cách tôi làm như vậy:

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

}
});

Tín dụng của chức năng bản đồ được chuyển đến @Naveen raj



2

Nếu bạn không muốn xây dựng bộ lọc tùy chỉnh thì bạn có thể sử dụng trực tiếp

{{ 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
Mặc dù đoạn mã này có thể là giải pháp, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
peacetype

1

Chỉ cần thêm vấn đề của riêng tôi vào vấn đề này, tôi sẽ tự mình sử dụng một chỉ thị tùy chỉnh;

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

Sau khi tuyên bố, bạn có thể đặt bên trong Html của bạn như dưới đây;

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

1

Thay vào đó nếu bạn muốn viết hoa từng từ của câu thì bạn có thể sử dụng mã này

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

và chỉ cần thêm bộ lọc "viết hoa" vào đầu vào chuỗi của bạn, ví dụ: {{name | viết hoa}}


0

trong Angular 4 hoặc CLI, bạn có thể tạo PIPE như thế này:

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 có 'titlecase' viết hoa chữ cái đầu tiên trong chuỗi

Ví dụ:

envName | titlecase

sẽ được hiển thị dưới dạng EnvName

Khi được sử dụng với phép nội suy, tránh tất cả các khoảng trắng như

{{envName|titlecase}}

và chữ cái giá trị đầu tiên của envName sẽ được in bằng chữ in hoa.


1
Điều này không cung cấp bất kỳ giá trị nào cho câu trả lời ở trên
Ivan Kaloyanov 23/07/18

1
Đây là một câu trả lời không chính xác, câu hỏi yêu cầu viết hoa chữ cái đầu tiên của chuỗi, không phải chữ cái đầu tiên của mỗi từ.
Alex Peters

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

-1

Bạn có thể thêm thời gian chạy chức năng viết hoa như:

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


-2

Thêm vào câu trả lời của Nidhish,

Đối với những người bạn đang sử dụng AngularJs và đang tìm cách viết hoa chữ cái đầu tiên của mỗi từ trong chuỗi, hãy sử dụng mã dưới đây:

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>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.