如何在AngularJS的输入字段中自动调整第一个字符的资本?

Fed*_*les 54 input capitalize angularjs angularjs-directive

如何在AngularJS表单元素内的输入字段中自动调整第一个字符的资本?

我已经看到了jQuery解决方案,但是相信在AngularJS中必须通过使用指令来完成.

Mar*_*cok 99

是的,您需要定义一个指令并定义自己的解析器函数:

myApp.directive('capitalizeFirst', function($parse) {
   return {
     require: 'ngModel',
     link: function(scope, element, attrs, modelCtrl) {
        var capitalize = function(inputValue) {
           if (inputValue === undefined) { inputValue = ''; }
           var capitalized = inputValue.charAt(0).toUpperCase() +
                             inputValue.substring(1);
           if(capitalized !== inputValue) {
              modelCtrl.$setViewValue(capitalized);
              modelCtrl.$render();
            }         
            return capitalized;
         }
         modelCtrl.$parsers.push(capitalize);
         capitalize($parse(attrs.ngModel)(scope)); // capitalize initial value
     }
   };
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<input type="text" ng-model="obj.name" capitalize-first>
Run Code Online (Sandbox Code Playgroud)

小提琴

  • @JasonGoemaat发生光标移动是因为内容被更改的文本替换(仅在第一个字母作为非资本输入时更改).要解决此问题,您可以捕获选择范围,并在设置新文本后重置新选择范围.有一个名为Rangy的甜蜜图书馆(https://code.google.com/p/rangy/),如果您对此有足够的认真态度,可以帮助您解决这个问题. (2认同)

bea*_*eek 52

请记住,并非一切都需要Angular解决方案.jQuery人群你看到了很多东西; 他们喜欢使用昂贵的jQuery函数来完成使用纯javascript更简单或更容易的事情.

因此,虽然您可能非常需要大写函数并且上述答案提供了这一点,但使用css规则"text-transform:capitalize"会更有效率

<tr ng-repeat="(key, value) in item">
    <td style="text-transform: capitalize">{{key}}</td>
    <td>{{item}}</td>
</tr>
Run Code Online (Sandbox Code Playgroud)

  • OP只想将输入中的第一个字母大写.该解决方案将每个单词都大写 (12认同)
  • 好的想法,但这不一定适用于输入字段,如果提交(输入输入,点击保存,例如),我只是被它咬了. (3认同)
  • 就我而言,我在这个问题上寻找"强制小写"解决方案.感谢发布这个,尽管它不是OP的完美解决方案. (2认同)

小智 23

您可以创建自定义过滤器"大写"并将其应用于您想要的任何字符串:

 <div ng-controller="MyCtrl">
     {{aString | capitalize}} !
</div>
Run Code Online (Sandbox Code Playgroud)

过滤器的JavaScript代码:

var app = angular.module('myApp',[]);

myApp.filter('capitalize', function() {
    return function(input, scope) {
        return input.substring(0,1).toUpperCase()+input.substring(1);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我不认为过滤器可以应用于输入字段. (5认同)