在Angular 1.2和1.3之间,ngModelController解析管道的行为似乎已更改。现在,我总是看到一个名为'parse'
$
的新验证密钥添加到所有$error
对象,并且只要其中一个解析器返回undefined,它就会覆盖/替换所有可能已经设置的其他验证密钥。
例如,这是Angular 1.2.23中的一个有效示例-尝试输入超出范围的数字:
http://jsfiddle.net/8doq0saf/5/
在1.3-rc下运行的同一事物会产生不同的结果:
http://jsfiddle.net/1t52s9b2/4/
我尚未找到有关此更改的任何文档。解析键的目的是什么,如何更改代码以恢复旧的行为?
angular.module('app', []).directive('number', function () {
return {
require: 'ngModel',
link: function (scope, elem, attrs, ctrl) {
// valid number
ctrl.$parsers.push(function (value) {
var valid = angular.isUndefined(value) || value === '' || isFinite(value);
ctrl.$setValidity('number', valid);
return valid
? angular.isUndefined(value) || value === '' ? undefined : Number(value)
: undefined;
});
ctrl.$parsers.push(function (value) {
if (!angular.isDefined(attrs.minNumber)) {
return value;
}
var valid = angular.isUndefined(value) || Number(value) >= Number(attrs.minNumber);
ctrl.$setValidity('minNumber', valid);
return valid ? value : undefined;
});
ctrl.$parsers.push(function (value) {
if (!angular.isDefined(attrs.maxNumber)) {
return value;
}
var valid = angular.isUndefined(value) || Number(value) <= Number(attrs.maxNumber);
ctrl.$setValidity('maxNumber', valid);
return valid ? value : undefined;
});
}
};
});
Angular 1.3使事物合理化,从而在 解析 和 验证 之间进行了清晰的区分。
Angular现在会自动向所有$error
集合添加一个“解析”键,并相应地设置其值-
true
如果返回任何解析器undefined
,false
则返回。
对于无法解析的值(为数字输入的字母,格式错误的日期等),我们应该undefined
从解析器返回。这将导致Angular删除$error
已设置的所有键,并用just替换整个对象{ "parse": true }
。不再运行解析器。该模型将不会更新。$parsers
现在,该数组仅应用于解析。
ngModelController具有一个新$validators
属性,我们可以向其分配验证功能。这些仅在解析管道成功的情况下运行。从这些函数之一返回false,以获取可解析为所需数据类型的值,但仅是无效的(字符串太长,数字超出范围等)。验证器函数的名称成为$error
对象中的验证键。即使一个返回,也将运行所有验证器false
。仅当验证成功后,才会更新模型。
这可能是现有应用程序的重大变化,因为人们经常undefined
从解析器返回无效值。这是我所拥有的,这是一个典型的示例:
ctrl.$parsers.push(function (value) {
if (!angular.isDefined(attrs.minNumber)) {
return value;
}
var valid = angular.isUndefined(value) || Number(value) >= Number(attrs.minNumber);
ctrl.$setValidity('minNumber', valid);
return valid ? value : undefined;
});
在这种新方案下,应将其移至验证功能:
ctrl.$validators.minNumber = function (value) {
return !value || !angular.isDefined(attrs.minNumber) || (value >= Number(attrs.minNumber));
});
这是已修复所有问题的指令:
angular.module('app', []).directive('number', function () {
return {
require: 'ngModel',
link: function (scope, elem, attrs, ctrl) {
// valid number
ctrl.$parsers.push(function (value) {
if(value === '') return value;
return isFinite(value) ? Number(value) : undefined;
});
ctrl.$validators.minNumber = function (value) {
return !value || !angular.isDefined(attrs.minNumber) || (value >= Number(attrs.minNumber));
};
ctrl.$validators.maxNumber = function (value) {
return !value || !angular.isDefined(attrs.maxNumber) || (value <= Number(attrs.maxNumber));
};
}
};
});
http://jsfiddle.net/snkesLv4/10/
我真的很喜欢这种新方法-它更清洁。
我有一个windows服务器,我需要从它使用sftp将文件传输到另一个服务器。目标服务器可能是Linux或windows box。 我的问题是,我必须在我的windows机器上依赖第三方sftp服务器软件,还是spring集成解决了这个问题? 我应该如何在windows box上生成公钥和私钥对?
任何一个可以黑进我的代码并获得客户端id、租户id和证书指纹的人都可以访问存储在我的密钥库中的秘密。那么,这与直接将秘密值存储在我的代码中,让任何一个黑进我代码的人都能读到有什么区别呢?
我在理解RSA签名和验证的概念方面有一个小问题。问题是我可以创建密钥对(公钥和私钥),这是完全好的。 签名和验证如下: 当我打印myPrivateKey和myPublicKey时,我看到公钥和私钥的模(n)和公钥指数(e)是相同的。 我已经将公钥和私钥转换为base64和hex,我得到了不同的值,这是非常好的。但是,我不能用base64或十六进制对消息进行签名。我只能用我从这里得到的东西来签名:
null 大多数示例使用makecert或New-SelfSignedCertificate创建证书。在这种情况下,对于生产应用程序,自签名证书是否有问题?这仅供应用程序使用Azure Key Vault进行身份验证,客户机在浏览器中不会看到这一点。 如果在这种情况下,自签名证书仍然不受欢迎,那么从受信任的权威机构购买证书是否与购买SSL/TLS证书的过程相同?甚至是同一类型的证书吗?
问题内容: 我有一个字段,例如,在表中应该是唯一的。 使用Spring / Hibernate验证进行验证的最佳方法是什么? 问题答案: 一种可能的解决方案是创建自定义约束(和相应的验证器)。并要查找数据库中的现有记录,请提供(或Hibernate)to 的实例。 EntityManagerAwareValidator ConstraintValidatorFactoryImpl 唯一键 Uniq
我正在经历cs50,我被困在pset2凯撒。我按照指示一步一步地进行,我已经通过了关于验证密钥的部分——确保命令行参数只是一个数字(./caesar 20),如果不是(./caesar 20x或。/caesar xyz),则打印出用法:/caesar密钥\n.但一旦我添加下一行提示用户输入明文,然后打印回密文,它似乎不会注册验证密钥的前几行。我知道哈佛大学的学术诚信政策,所以我更多地是在寻求这方面