首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AngularJS中,在指令DOM之后插入DOM的定制指令的最佳编写方式是什么?

在AngularJS中,在指令DOM之后插入DOM的定制指令的最佳编写方式是什么?
EN

Stack Overflow用户
提问于 2015-06-24 15:48:14
回答 2查看 51关注 0票数 0

我想写一个'vt-require‘指令覆盖'required’指令,这样我就可以编写代码:

代码语言:javascript
复制
<input type="text" name="form.fullname" data-ng-model="fullname" data-vt-required/>

html将为:

代码语言:javascript
复制
<input type="text" data-vt-required="" data-ng-model="fullname" name="fullname">
<div class="error-list">
    <span data-ng-show="form.fullname.$error.required">The field cannot empty</span>
</div>

按照下面的说明https://docs.angularjs.org/api/ng/service/$compile,我可以写它。但我不知道什么是安全的方式来写它?编写代码add的选项1、2、3或4

代码语言:javascript
复制
<div class="error-list">
<span data-ng-show="form.fullname.$error.required">The field cannot empty</span>
</div>

--

代码语言:javascript
复制
var vtRequiredDirective = [function () {
    return {
        restrict: 'A',
        require: '?ngModel',
        compile: function (elm, attr) { 
            //[Option 1]
            return {
                pre: function (scope, elm, attr, ctrl) {
                    //[Option 2]
                },
                post: function (scope, elm, attr, ctrl) {
                    //[Option 3]
                }
            }
        },
        link : function (scope, elm, attr, ctrl) {
                    //[Option 4]
                }
    };
}];

希望这是可以理解的。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-06-24 16:06:38

我个人会选择选项4(在link函数中这样做)。

另外,我将为表单添加一个require,这样您就可以动态地获取表单名称,而不是依赖于在name属性中设置的表单名称。

例如。

代码语言:javascript
复制
require: '^form',
link: function ($scope, $element, $attrs, $formCtrl) {

    // $name will be the form name
    var fullyQualifiedName = $formCtrl.$name + "['" + $attrs.ngModel + "']";

    // create the expression to be used by the ng-show for the error span
    var isRequiredExpression = fullyQualifiedName + ".$error.required && (" + $formCtrl.$name + ".$submitted || !" + fullyQualifiedName + ".$pristine)";

    // etc
    ....
}
票数 0
EN

Stack Overflow用户

发布于 2015-06-24 16:29:25

这将是选项4。

编译函数处理模板DOM的转换。由于大多数指令不进行模板转换,因此不常使用。

也许你也可以用一个模板替换整个指令:

代码语言:javascript
复制
<input-requierd name="fullname" />

指令:

代码语言:javascript
复制
var inputRequiredDirective = function () {
  return {
    restrict: 'E',
    replace = true,
    scope: {
      name = '@'
    }
    template: '<input type="text" data-ng-model="{{name}}" name="{{name}}"><div class="error-list"><span data-ng-show="form.{{name}}.$error.required">The field cannot empty</span></div>'
  };
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31020727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档