【问题标题】:Pass some properties to a directive in AngularJS将一些属性传递给 AngularJS 中的指令
【发布时间】:2013-12-08 20:12:26
【问题描述】:

我创建了一个指令 (itcValidationMessages),它将让我显示验证消息,并将其作为属性放在表单元素上,如下所示:

<form id="register-form" novalidate ng-submit="register()" itc-validation-messages ...

我上面提到的指令遍历表单中的所有输入元素,并在任何人的状态无效时显示错误消息。

我将验证消息存储在单独的文件中(因为它们可能很多,并且我想为 i8n 做准备,所以我将它们与指令分开),如下所示:

angular.module('models.ValidationMessages', []).constant("ValidationMessages", {
validationMessages: {
    required: 'Value is required!',
    email: 'You should enter a valid email address!',
    minlength: 'Enter more characters!',
    maxlength: 'You have entered to many characters!'
}

});

将这些消息保持不变是正确的方法吗?

我有每个验证器的默认消息,但我想让每个输入添加自定义消息,例如:

<input type="password" minlength-message="Your password should has at least 3 characters"

最好的方法是什么? 因为为什么我使用上面的属性(minlength-message),如果不使用$observe,我就无法从我的指令中访问它。 我不想声明一个对象并将这些自定义消息放在一个地方,因为我应该为每条消息添加一个输入名称,以识别它们属于哪个输入。 所以我尝试找到一些方便且符合艺术的解决方案。

我不需要 itcValidationMessages 指令中的隔离范围,并且我不希望像 minlengthMessage 这样的每个验证器都有一个单独的指令将特定的验证消息传递给应该显示此消息 (itcValidationMessages) 的指令。

【问题讨论】:

    标签: javascript angularjs angularjs-directive


    【解决方案1】:

    这是一个关于如何从指令中访问数据的示例:

    var myModule = angular.module('myModule', [])
        .directive('myComponent', function () {
            return {
                restrict:'E',
                scope:{
                    minlengthMessage:'@'
                }        
            };
        })
    

    所以现在你可以从

    $scope.minlengthMessage
    

    【讨论】:

    • 感谢您的回答,但这不是我的意思。我已经澄清了一点我的描述,如果我感到困惑,对不起。
    • 我不想要另一个指令,因为我在表单元素上有一个。我必须以某种方式将这些验证消息与每个输入连接起来,并从我的指令中访问它们。
    【解决方案2】:

    您还可以使用传递给指令链接函数的 attrs。

    这是一个例子:

    .directive('minlength', function () {
         return {
              restrict: 'EA',
              link: function ($scope, $element, $attrs) {
                  var myDirectiveParam = $attrs.minlengthMessage;
              }
         };
    })
    

    在您的 HTML 中:

    <input minlength minlength-message="Your message here.." />
    

    【讨论】:

    • 感谢您的回答,但这不是我的意思。我已经澄清了一点我的描述,如果我感到困惑,对不起。关键是我想在表单元素上有一个指令,并且每个输入都有很多消息。
    • 顺便说一句。为什么在链接函数的注入中使用美元符号?
    猜你喜欢
    • 2014-04-03
    • 2013-04-23
    • 2015-10-27
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多