我正在尝试创建一个server-validate
指令,它通过向我们的服务器后端提交部分表单并解析响应来异步验证表单输入。我希望像这样使用它:
<input type="text" ng-model="stuff" server-validate />
(我将它与包装<form>
上的另一个指令相结合,指定要使用的URL等...)为了使表单不在页面加载时提交验证请求,我需要设置ng-model-options="{ updateOn: 'blur' }", but I'd like to *not* have to do this on every element in the form. Instead, I'd like the
server-validate`也可以指定此行为。
我在link
函数中尝试了一些事情,例如attrs['ngModelOptions'] = '{updateOn: "blur"}'
和attrs['ngModelOptions'] = { updateOn: 'blur' }
,但两者都没有任何效果。
有没有办法通过我自己的指令应用它,而不必指定任何其他内容?
答案 0 :(得分:0)
他们在文档中有一个很好的例子:
directive('contenteditable', ['$sce', function($sce) {
return {
restrict: 'A', // only activate on element attribute
require: '?ngModel', // get a hold of NgModelController
link: function(scope, element, attrs, ngModel) {
if (!ngModel) return; // do nothing if no ng-model
// Specify how UI should be updated
ngModel.$render = function() {
element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
};
// Listen for change events to enable binding
element.on('blur keyup change', function() {
scope.$evalAsync(read);
});
read(); // initialize
// Write data to the model
function read() {
var html = element.html();
// When we clear the content editable the browser leaves a <br> behind
// If strip-br attribute is provided then we strip this out
if ( attrs.stripBr && html == '<br>' ) {
html = '';
}
ngModel.$setViewValue(html);
}
}
};
}]);
因此,唯一看起来会改变的是删除keyup并从element.on更改事件。然后在你的模糊中你也会做服务器请求。 ngModelController上的文档:https://docs.angularjs.org/api/ng/type/ngModel.NgModelController