【问题标题】:How can I parse String to Int in an Angular expression?如何在 Angular 表达式中将 String 解析为 Int?
【发布时间】:2014-02-19 07:43:55
【问题描述】:

一个数字字符串'5'

var num_str = '5';

我怎样才能同时解析并让下面的答案正确?

{{num_str + 1}}  // 6
{{num_str - 1}}  // 4

parseInt 不能用于 Angular 表达式,

{{parseInt(num_str) - 1}}    

数字过滤器不能做加减,

{{num_str - 1 | number}}

如果有人有有用的建议,我将非常感谢你

【问题讨论】:

  • 听起来你想要一个自定义过滤器,它们很容易编写一个接受输入并返回输出的函数。

标签: javascript angularjs


【解决方案1】:

您可以创建管道并在系统中的任何位置使用它。

import { Pipe, PipeTransform } from '@angular/core';
 @Pipe({
     // tslint:disable-next-line:pipe-naming
     name: 'toNumber',
     pure: false }) export class ToNumberPipe implements PipeTransform { 
     public transform(items: any): any {
         if (!items) {
             return 0;
         }
         return parseInt(items, 10);
     } }

在 HTML 中

{{ attr.text | toNumber }}

记得在你的模块文件中声明这个管道是可访问的。

【讨论】:

    【解决方案2】:

    不是很好,而是一个有趣的 hack: 您可以 -- 而不是 +

    {{num_str -- 1 }}
    

    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
    <div ng-app>
      {{'1'--1}}
    </div>

    【讨论】:

      【解决方案3】:
      {{ num_str - 0 }}
      

      ...为我工作。

      【讨论】:

      • 天才解决方案。当 num_str = '' Null 字符串时,这仍然有效。我以为我会得到一个 NaN,但效果很棒!
      • 不错的解决方案。适用于空字符串和空白字符串;这只是 Javascript 行为,因此它应该永久有效。仅获取未定义的 NaN 或字符串不是有效数字。
      【解决方案4】:

      我更喜欢使用角度滤镜。

      app.filter('num', function() {
          return function(input) {
            return parseInt(input, 10);
          };
      });
      

      那么你可以在 dom 中使用它:

      {{'10'|num}}
      

      这是fiddle

      希望这有帮助!

      【讨论】:

      • 有用并且以 AngularJs 的方式。谢谢!
      • 非常好的解决方案!
      • 如果您想按照问题要求 +1 或 -1,则不起作用。
      【解决方案5】:

      我尝试了上面提到的解决方案,但没有一个对我有用。我使用了 JSON.parse 并且成功了:

      $http.get('/api/getAdPolling')
        .success(function (data) {
          console.log('success: ' + data.length);
      
          if (JSON.stringify(data) != "not found") {
              $scope.adPoll = JSON.parse(data);
          }
      })
        .error(function (data) {
          console.log('Error: ' + data);
      });
      

      【讨论】:

        【解决方案6】:

        以上都不适合我。

        但是这样做了:

        {{ (num1_str * 1) + (num2_str * 1) }}
        

        【讨论】:

          【解决方案7】:

          另一种选择是:

          $scope.parseInt = parseInt;
          

          然后你可以按照你的意愿去做:

          {{parseInt(num_str)-1}}
          

          这是因为角度表达式无法访问window,只能访问scope

          此外,使用数字过滤器,将表达式括在括号中也可以:

          {{(num_str-1) | number}}
          

          DEMO

          【讨论】:

          • Angular 内置 |在大多数情况下,数字过滤器是要走的路。
          【解决方案8】:

          在您的控制器中:

          $scope.num_str = parseInt(num_str, 10);  // parseInt with radix
          

          【讨论】:

          【解决方案9】:

          除了 {{ 1 * num_str + 1}} 你也可以这样尝试(减号):

          {{ num_str - 0 + 1}}
          

          但是它非常脆弱,如果 num_str 包含字母,那么它会失败。所以最好尝试像@hassassin 所说的那样编写一个过滤器,或者在启动它之后立即对数据进行预处理。

          【讨论】:

            【解决方案10】:

            你可以试试:

            {{ 1 * num_str + 1 }}
            

            http://jsfiddle.net/Z32fP/

            【讨论】:

            • 请不要在真正的代码库中添加这样的小技巧。
            • 如果数字是千位并且字符串中有逗号,这将不起作用。这可以把 1000 变成一个数字,但不是 1,000
            • 我同意这是一个 hack,但这看起来是唯一可行的解​​决方案
            【解决方案11】:

            您可以使用javascript Number 方法将其解析为数字,

            var num=Number (num_str);
            

            【讨论】:

            • 投反对票,因为这是关于 angularjs 的讨论,而不是纯 javascript。
            猜你喜欢
            • 2012-05-24
            • 2012-06-24
            • 1970-01-01
            • 1970-01-01
            • 2011-10-10
            • 2020-10-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多