【问题标题】:angularjs: access form field inside directiveangularjs:访问指令内的表单字段
【发布时间】:2014-03-03 20:18:53
【问题描述】:

我有一个指令 barFoo,它具有以下模板:

<div>
    ....
    <input ng-model="data">
</div>

该指令在表单中使用!现在,在这个指令中,我想做一些事情,比如

element.find('input').$setValidity('bar-valid', false);

但是,这不起作用。此外,输入字段没有 name 属性。 没有'name'属性有没有办法做到这一点?

更新:另一种解决方案是在指令元素上定义 ngModel

<bar-foo ng-model="data.value"></bar-foo>

并将指令改写如下

....
    .directive('barFoo', function () {
        return {
            require: 'ngModel',
            ...
            link: function (scope, element, attrs, ctrl) {
                ctrl.$setValidity('bar-valid', false);
            }
    });

【问题讨论】:

    标签: javascript angularjs angularjs-directive angularjs-ng-form


    【解决方案1】:

    看看这个问题:AngularJS Form Validation Directive $setValidity on element

    我会准确地给你你需要的东西,包括代码

    【讨论】:

    • 该帖子中的解决方案是使用 name 属性。在这个问题中,我想知道是否可以在没有的情况下做到这一点
    • $serValidity 是 angularjs 魔法的一部分。如果你想使用它,那么你需要坚持使用 angularjs 表单处理。这意味着,您需要一个名称属性。无论如何,名称属性有什么问题?
    • 嗯,该指令是通用的。在一种形式中,它可以多次使用。因此,如果我需要使用 name 属性,我需要生成一个随机名称(我认为)。所以这就是为什么我想知道我是否可以没有
    • 你仍然需要使用 name 属性。唯一的事情是:你必须在你的指令中使用 ng-form
    【解决方案2】:

    您可以使用 name="itAmazingName" 调用指令并在指令模板中使用它,这应该可以解决您的问题

    【讨论】:

    • 这行不通。如果您有多个带有 name="itAmazingName" 的元素,我会说 $setValidity 中断,因为表单将所有元素视为一个实体!
    • 谁说有多个同名元素?我只建议使用名称作为指令,然后在指令模板中使用它
    • 好的,你想调用带有 name 属性的指令元素。有趣,但您仍然必须生成名称属性值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2014-04-24
    • 2019-09-18
    • 2017-08-15
    相关资源
    最近更新 更多