AngularJS 从 ngMessages 生成指令
AngularJS make directive from ngMessages
我想创建一个允许我在输入附近生成验证消息的指令 - 基于 ngMessages(如示例)。我有这个工作 HTML 示例:
<div class="field">
<div class="ui right icon input">
<input type="email" name="email" ng-model="vm.user.email" placeholder="E-mail" required>
<i class="at icon"></i>
</div>
<div ng-messages="vm.signUpForm.email.$error" ng-show="vm.signUpForm.$submitted">
<div ng-messages-include="shared/validation/formErrorMessages.html"> </div>
</div>
</div>
我当前的指令:
var app = angular.module('app.directives', []);
app.directive('formError', function() {
return {
restrict: 'AE',
replace: 'false',
scope: {
statement: '@',
error: '@'
},
template: '<div ng-messages="error" ng-show="true"><div ng-messages-include="shared/validation/formErrorMessages.html"></div></div>'
};
});
以及我如何尝试 运行 它:
<div form-error error="{{ vm.signUpForm.email.$error }}" statement="{{ vm.signUpForm.$submitted }}"></div>
它不工作 - 消息不会出现 - 没有任何错误。在消息显示上,我还想将 class 'error' 添加到 'div.field',但这应该很容易。
知道如何使该指令起作用或者如何以另一种更舒适的方式处理它吗?
你犯了一个错误,你应该将属性传递给指令
scope: {
statement: '=',
error: '='
},
@ biding 用于传递字符串值,而不是对象,而 error 是一个对象,因此以这种方式传递它不会按预期工作。当然你可以使用 attr.$observe 和 JSON.parse,但这不是你想在这里做的。
我想创建一个允许我在输入附近生成验证消息的指令 - 基于 ngMessages(如示例)。我有这个工作 HTML 示例:
<div class="field">
<div class="ui right icon input">
<input type="email" name="email" ng-model="vm.user.email" placeholder="E-mail" required>
<i class="at icon"></i>
</div>
<div ng-messages="vm.signUpForm.email.$error" ng-show="vm.signUpForm.$submitted">
<div ng-messages-include="shared/validation/formErrorMessages.html"> </div>
</div>
</div>
我当前的指令:
var app = angular.module('app.directives', []);
app.directive('formError', function() {
return {
restrict: 'AE',
replace: 'false',
scope: {
statement: '@',
error: '@'
},
template: '<div ng-messages="error" ng-show="true"><div ng-messages-include="shared/validation/formErrorMessages.html"></div></div>'
};
});
以及我如何尝试 运行 它:
<div form-error error="{{ vm.signUpForm.email.$error }}" statement="{{ vm.signUpForm.$submitted }}"></div>
它不工作 - 消息不会出现 - 没有任何错误。在消息显示上,我还想将 class 'error' 添加到 'div.field',但这应该很容易。
知道如何使该指令起作用或者如何以另一种更舒适的方式处理它吗?
你犯了一个错误,你应该将属性传递给指令
scope: {
statement: '=',
error: '='
},
@ biding 用于传递字符串值,而不是对象,而 error 是一个对象,因此以这种方式传递它不会按预期工作。当然你可以使用 attr.$observe 和 JSON.parse,但这不是你想在这里做的。