当前位置: 首页 > 面试题库 >

如何使百分比格式的输入在最新的AngularJS上工作?

牧甫
2023-03-14
问题内容

我看到了这个解决方案http://jsfiddle.net/gronky/GnTDJ/,它可以正常工作。也就是说,当您输入25时,会将其推回模型为0.25

HTML:

<script type="text/javascript" ng:autobind
        src="http://code.angularjs.org/0.9.17/angular-0.9.17.js"></script>
<script>
function Main() {
    this.var = '1.0000';
}
</script>
<div ng:controller="Main">
    <input type="text" name="var" ng:format="percent">
    <pre>var = {{var|json}}</pre>
</div>​

JavaScript:

angular.formatter('percent', {
  parse: function(value) {
    var m = value.match(/^(\d+)\/(\d+)/);
    if (m != null)
      return angular.filter.number(parseInt(m[1])/parseInt(m[2]), 2);
    return angular.filter.number(parseFloat(value)/100, 2);
  },
  format: function(value) {
    return angular.filter.number(parseFloat(value)*100, 0);
  },
});
​

我尝试使其在最新的AngularJS上运行,尽管http://jsfiddle.net/TrJcB/仍然无法正常工作,也就是说,当您输入25时,它也被推回25,因此它不能正确推入0.25模型的价值。

也许已经有一个内置的百分比格式化程序?我也想要货币格式化程序,或者用逗号分隔的数字。


问题答案:

该小提琴不适用于当前的Angular版本,因为此后已更改了许多API。angular.formatter不再可用,也不再可用angular.filter

现在编写它的方法是使用指令,$parser$formatter在指令控制器上使用和可用。因此,您的链接函数将类似于

link: function(scope, ele, attr, ctrl){
        ctrl.$parsers.unshift(
            function(viewValue){
                return $filter('number')(parseFloat(viewValue)/100, 2);
            }
        );
        ctrl.$formatters.unshift(
            function(modelValue){
                return $filter('number')(parseFloat(modelValue)*100, 2);
            }
        );
      }

现在也可以通过$filter服务访问过滤器。您可以在这里找到文档:https
:
//docs.angularjs.org/api/ng/filter/number

更新了原始示例的提琴:http :
//jsfiddle.net/abhaga/DdeCZ/18/

货币过滤器已提供以下角度:https :
//docs.angularjs.org/api/ng/filter/currency



 类似资料:
  • 问题内容: 我的百分比被默认的java.text.MessageFormat函数截断了,如何格式化百分比而不损失精度? 例: 问题答案: 看起来像这样: … 正在工作。 编辑:要查看#和%的含义,请参见java.text.DecimalFormat的javadoc。 编辑2:是的,它对于国际化是安全的。格式字符串中的点被解释为小数点分隔符,而不是硬编码点。:-)

  • 问题内容: Test A long string blah blah blah 上面的方法不起作用。如何使用百分比设置表格单元格的最大宽度? 问题答案: 根据CSS 2.1规范中max-width的定义,“’min-width’和’max-width’对表,内联表,表单元格,表列和列组的影响是不确定的。” 因此,您不能直接在td元素上设置最大宽度。 如果只希望第二列最多占用67%,则可以将宽度(对

  • 在此示例中,我们以百分比格式格式化数字。 IOTester.java import java.text.NumberFormat; import java.util.Locale; public class I18NTester { public static void main(String[] args) { Locale enLocale = new Locale("en"

  • 问题内容: HTML CSS 在上面的示例中,其padding-top为。该值应基于父元素的()高度进行计算,这意味着它应显示为。而是显示为。这是怎么回事? 问题答案: 规格说明了原因。 相对于生成的框的包含块的 宽度 计算百分比 400的50%是200。

  • 问题内容: 我正在尝试编写一条指令,该指令会自动在中格式化数字,但模型未格式化。使它正常工作是很好的,在加载时,输入值在控制器中显示为1,000,000和1000000,但是,只有键入时,该函数才会触发。发生火灾的唯一时间是指令被加载且值为0时。 我怎样才能使它在keypress上起作用(我曾尝试绑定到keypress / keyup,但它不起作用)。 这是我的代码: 问题答案: 这是我们使用的工

  • 在Android Studio2.2的预览版1中,Google在其支持库中发布了一个新的布局:。使用ConstraintLayout可以更容易地在Android Studio中使用设计工具,但我没有找到使用相对大小(像LinearLayout中的百分比或‘权重’)的方法。有没有一种方法来定义基于百分比的约束?例如。使一个视图占据屏幕的40%,在视图之间创建20%的边距,将一个视图的宽度设置为另一个