我在使用表单时遇到一些基本麻烦。这就是我所做的。
我从这里获取了这个很酷的指令:https :
//github.com/TheSharpieOne/angular-input-
match
看起来像这样:
directive('match', function () {
return {
require: 'ngModel',
restrict: 'A',
scope: {
match: '='
},
link: function(scope, elem, attrs, ngModel) {
scope.$watch(function() {
return (ngModel.$pristine && angular.isUndefined(ngModel.$modelValue)) || scope.match === ngModel.$viewValue;
}, function(currentValue, previousValue) {
ngModel.$setValidity('match', currentValue);
});
}
};
});
本质上,此指令监视其附加到模型值的元素,并将其与match属性中的模型值进行比较。
所以…例如,下面我们正在看两个密码是否匹配:
Password: <input ng-model="password" type="password" />
Confirm: <input ng-model="passwordConfirm" type="password" match="password" />
该指令似乎有效,因为它可以适当地设置ng-valid-match和ng-invalid-match。
但是,一旦将其设置为无效,passwordConfirm模型就不会再更新。我做了很多console.loggin,在指令中查看ngModel,这是两个密码匹配时的样子:
Constructor {$viewValue: "asdf", $modelValue: undefined, $validators: Object, $parsers: Array[0], $formatters: Array[0]…}
$$debounceViewValueCommit: function (trigger, revalidate) {
$$invalidModelValue: "asdf"
$$lastCommittedViewValue: "asdf"
$$runValidators: function (modelValue, viewValue) {
$$validityState: ValidityState
$$writeModelToScope: function () {
$commitViewValue: function (revalidate) {
$dirty: true
$error: Object
$formatters: Array[0]
$invalid: false
$isEmpty: function (value) {
$modelValue: undefined
$name: "passwordConfirmation"
$parsers: Array[0]
$pristine: false
$render: function () {
$rollbackViewValue: function () {
$setPristine: function () {
$setTouched: function () {
$setUntouched: function () {
$setValidity: function (validationErrorKey, isValid) {
$setViewValue: function (value, trigger, revalidate) {
$touched: true
$untouched: false
$valid: true
$validate: function () {
$validators: Object
$viewChangeListeners: Array[0]
$viewValue: "asdf"
__proto__: Object
请注意,$ viewValue是正确的,但是$ modelValue被列为未定义,并且$ invalidModelValue仍然具有值。
这是html的样子,当两个密码都匹配时:
<input type="password" class="form-control ng-isolate-scope ng-dirty ng-valid-required ng-valid ng-valid-match ng-touched" id="passwordConfirmation" name="passwordConfirmation" placeholder="Confirm your password" ng-model="passwordConfirmation" required="" match="password" style="">
我在某处缺少什么吗?我已经在圈子里跑了好几个小时了。
看起来使用$setValidity可能不是这里的方法。我发现这个问题提出了一个不同的解决方案,使用$ validators和$ validate(),这对我来说非常有用。新代码如下所示:
directive('match', function () {
return {
require: 'ngModel',
restrict: 'A',
scope: {
match: '='
},
link: function(scope, elem, attrs, ngModel) {
scope.$watch('match', function(pass){
ngModel.$validate();
});
ngModel.$validators.match = function(modelValue, viewValue){
var value = modelValue || viewValue;
var match = scope.match;
return value === match;
};
}
};
});
描述 我有一个小应用程序,它使用hook更新状态,但每次更新时,都会导致页面延迟。我指的是实际的延迟,而不仅仅是“等待异步”延迟。 我的理论是,更新状态会重新呈现太多的组件,因为如果我将状态减少到更少的值,滞后就会消失。 从本质上说,我担心我更新状态的方式没有隔离我想要的值。 密码 我将回购加载到CodeSandbox:https://codesandbox.io/s/long-forest-y9
更新Google Cloud SDK 189.0.0后,以前很好的命令现在错误如下:
问题内容: 问题 :定期更新GUI字段时,SWT冻结。 我想有一个带有文本字段的基于SWT的GUI,其值会定期增加。 最初,我从单独的线程访问textField导致抛出异常: 线程“ Thread-0”中的异常org.eclipse.swt.SWTException:在org.eclipse.swt.SWT.error(SWT.java)的org.eclipse.swt.SWT.error(SWT
java.lang.nosuchmethoderror:org.springframework.boot.builder.springapplicationbuilder.([ljava/lang/object;)V在org.springframework.cloud.bootstrap.bootstrapapplicationlistener.bootstrapserviceContext(bo
我有简单的代码,检查用户是否有特定的角色: 现在的问题是,当我改变角色时,所以在机器人运行时删除特定角色,用户仍然拥有权限。所以在机器人缓存中,用户仍然拥有特定的角色。 当用户角色改变时,有没有办法更新机器人缓存? 提前感谢