gpt4 book ai didi

angularjs - ngMessages 在指令模板中不起作用

转载 作者:行者123 更新时间:2023-12-03 17:43:02 26 4
gpt4 key购买 nike

我的 ngMessages 在我的指令模板中不起作用!

我有一个指令 myInput使用模板和链接函数,在模板函数内,我为包装 <label> 创建模板字符串和 <input> .

在 Link 函数中,我使用了 require: '^form' FormController 并检索表单名称。然后我放了一个 ngMessages在包裹的元素之后阻塞。

    (function () {
'use strict';

angular
.module('app.components')
.directive('myInput', MyInput);

/*@ngInject*/
function MyInput($compile, ValidatorService, _, LIST_OF_VALIDATORS) {
return {
require: '^form',
restrict: 'E',
controller: MyInputController,
controllerAs: 'vm',
bindToController: true,
template: TemplateFunction,
scope: {
label: '@',
id: '@',
value: '=',
validateCustom: '&'
},
link: MyInputLink

};

function MyInputController($attrs) {
var vm = this;
vm.value = '';
vm.validateClass = '';
vm.successMessage = '';
vm.errorMessage = '';
}

function TemplateFunction(tElement, tAttrs) {
return '<div class="input-field">' +
' <label id="input_{{vm.id}}_label" for="input_{{vm.id}}" >{{vm.label}}</label>' +
' <input id="input_{{vm.id}}" name="{{vm.id}}" ng-class="vm.validateClass" type="text" ng-model="vm.value" >' +
'</div>';

}

function MyInputLink(scope, element, attrs, form){
var extra = ' <div ng-messages="' + form.$name + '.' + scope.vm.id + '.$error">' +
' <div ng-messages-include="/modules/components/validationMessages.html"></div>' +
' </div>';
$(element).after(extra);
}
}
})();

用法:
    <h1>Test</h1>
<form name="myForm">
<my-input label="My Input" id="input1" value="vm.input1"></my-input>

-------

<!-- this block is hardcoded and is working, it does not come from the directive! -->
<div ng-messages="myForm.input1.$error">
<div ng-messages-include="/modules/components/validationMessages.html"></div>
</div>

</form>

最佳答案

而不是在 link 中添加 ngMessages 块函数,将其添加到 compile 中功能。

它不像 link 那样方便由于缺少功能FormController ,但它有效:-)

这里的代码:

    compile: function(tElement, tAttrs){
var name = tElement.closest('form').attr('name'),
fullFieldName = name + '.' + tAttrs.id; // or tAttrs.name
var extra = '<div ng-messages="' + fullFieldName + '.$error">' +
' <div ng-messages-include="/modules/components/validationMessages.html"></div>' +
'</div>';
$(element).after(extra);

关于angularjs - ngMessages 在指令模板中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31555748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com