我已经将 requirejs 与 angular app 集成在一起。在集成 requirejs 之前,
<input type="number" value="{{cart.quantity}}" ng-model="cart.quantity" />
正在显示输入框中的值。
但是在与 requirejs 集成后,type="number" 的输入框没有向我显示值.. type="text" 的输入框正在工作。
如何使用 type="number" 显示价值?
谢谢
我已经将 requirejs 与 angular app 集成在一起。在集成 requirejs 之前,
<input type="number" value="{{cart.quantity}}" ng-model="cart.quantity" />
正在显示输入框中的值。
但是在与 requirejs 集成后,type="number" 的输入框没有向我显示值.. type="text" 的输入框正在工作。
如何使用 type="number" 显示价值?
谢谢
我刚刚遇到了同样的问题并设法解决了它。在我的例子中,模型是通过 RESTful 获得的$resource
,并且金额的值作为字符串提供给字段,这反过来会消除该值。为了解决这个问题,我最终在我的控制器中执行了以下操作:
$scope.cart = Cart.get(id: $routeParams.id, function(cart){
cart.quantity = parseFloat(cart.quantity, 10);
});
在更新视图之前将值转换为浮点数。我遇到的一个问题是我的第一次尝试是$scope.cart.quantity = parseFloat($scope.cart.quantity, 10)
在get
. 这不起作用,因为在异步调用get
完成时该值被覆盖。
$scope.cart = Cart.get(id: $routeParams.id);
$scope.cart.quantity = parseFloat($scope.cart.quantity, 10); // This won't work
希望这可以帮助。
您的绑定值string
不是 a number
。
首先,检查您的服务器是否正在发送number
. 如果您使用的是 PHP,您可能希望使用:
json_encode($array, JSON_NUMERIC_CHECK);
您也可以在客户端将您的string
变成int
或使用 Javascript:float
var data = ['1.9', '3']; //these won't be binded to the numbers-only input
data[0] = parseFloat(data[0]); //this will
data[1] = parseInt(data[1]);
这不是一个错误,因为numbers
输入只接受有效数字(希望如此)。
笔记:
我还尝试将 anng-value
与整数过滤器绑定,但它不起作用。也许是因为ng-model
当两者都被找到时绑定的是(是的,它们具有相同的优先级)。
我使用自定义指令解决了这个问题:
angular.module('directives').directive('input', function() {
return {
restrict: 'E',
require: 'ngModel',
link: function(scope, $el, attrs, ngModel) {
if ($el.get(0).type === 'number') {
ngModel.$parsers.push(function(value) {
return value.toString();
});
ngModel.$formatters.push(function(value) {
return parseFloat(value, 10);
});
}
}
}
})
这样,当通过 restfull 资源获取数据时,您不需要更改任何 HTTP 响应。
如有必要,限制此指令:)
值被 ng-model 覆盖。删除您的 value 属性,您的 ng-model 将使用购物车数量填充输入。
我遇到了同样的问题(实际上是输入 type="range"),这是我的解决方案,使用自定义指令:
app.directive('ngFloat', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, $el, attrs, ngModel) {
ngModel.$parsers.push(function(value) {
return parseFloat(value, 10);
});
ngModel.$formatters.push(function(value) {
return value.toString();
});
}
};
});
由于我将指令限制为“ngFloat”属性,因此需要像这样标记输入:
<input ng-float type=.........
我希望这可以帮助未来的游客。
我在输入中添加了一个名称属性,它开始工作
如果cart.quantity数据类型不是Number
,它将不起作用。
您需要
$scope.cart.quantity = parseFloat($scope.cart.quantity);
在这种情况下,您的 ng-model cart.quantity 必须是数字而不是字符串。
我也遇到了同样的问题,并试图找到一个对新手来说很复杂的解决方案,然后我在 https://docs.angularjs.org/api/ng/input/input遇到了旧版本 angular 的解决方案%5B数字%5D
根据哪个 ng-model 接受一个字符串,解决方法是我们定义一个
分钟
和
最大限度
使用输入类型=“数字”时的值
它对我有用,我希望它也适用于其他人
我找到了这个链接,这对我有帮助。它创建了一个字符串到数字的指令,您可以以类似的方式将其附加到数字输入,Ruy Diaz 展示了:https ://docs.angularjs.org/error/ngModel/numfmt
angular
.module('xxx')
.directive('ngFloat', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, $el, attrs, ngModel) {
ngModel.$formatters.push(function (value) {
return +value
});
}
};
});
奇怪的是,在我的情况下,从为我工作的文件中删除min
和max
属性。input type="number"
我的意思是ng-model
工作!
似乎与上面发布的 arpit kumar 完全相反。
AngularJS 版本:1.6.1