如何在另一个链接中指定角度指令?

时间:2014-12-02 12:03:42

标签: angularjs angularjs-directive angular-ngmodel

我正在尝试创建一个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' },但两者都没有任何效果。

有没有办法通过我自己的指令应用它,而不必指定任何其他内容?

1 个答案:

答案 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