Я работаю над большим проектом с AngularJS. Поэтому я хочу сделать работу для одной формы максимально простой. Как мы также используем самозагрузки код для одного поля ввода в форме, является довольно громоздким, может быть, какКак я могу автоматически добавлять метки к полям ввода?
<div class="control-group">
<label class="control-label" for="inputEmail">Email</label>
<div class="controls">
<input type="text" id="inputEmail" placeholder="Email">
</div>
</div>
Если бы я мог написать один тег как
<custom-input
label="Email"
name="inputEmail"
placeholder="Email"
type="text"
... >
</custom-input>
вместо этого, это будет помогите сохранить код в чистоте, а работа прост.
Чтобы добиться этого, я работаю над пользовательской директивой AngularJS. В моей директиве в настоящее время используется шаблон, аналогичный приведенному выше примеру начальной загрузки, автоматически присваивая метку входному тегу. Кроме того, функция компилятора директивы перемещает все атрибуты из тега пользовательского ввода в реальный тег ввода, чтобы упростить настройку тега пользовательского ввода.
app.directive('customInput', function() {
return {
require: 'ngModel',
restrict: 'E',
template: '<div>' +
'<label for="{{ name }}">the label</label>' +
'<input id="{{ name }}" ng-model="ngModel" />' +
'</div>',
scope: {
ngModel: '=',
name: '@name',
},
replace: true,
compile: function (tElement, tAttrs, transclude) {
var tInput = tElement.find('input');
// Move the attributed given to 'custom-input'
// to the real input field
angular.forEach(tAttrs, function(value, key) {
if (key.charAt(0) == '$')
return;
tInput.attr(key, value);
tInput.parent().removeAttr(key);
});
return;
},
};
});
на переполнение стека, есть много вопросов, касающихся создания пользовательских полей ввода, но они связаны с data binding, custom formatting или binding to ng-repeat.
У моего подхода, однако, есть другая проблема: хотя привязка данных работает правильно, модуль проверки целостности модуля Углового путается, когда поле ввода «требуется». По какой-то причине проверка не распознает новое поле ввода и вместо этого сохраняет форму недействительной из-за некоторой мертвой ссылки, которая имеет пустое значение. См. the minimal example.
Откуда берутся мертвые ссылки? Как я могу обновить ссылки модуля проверки? Есть ли лучший способ достичь моей общей цели?
Спасибо, Джейсон! Использование 'tInput.prop (key, true)' вместо 'attr'-call для атрибутов с' value == '' 'делает трюк, если вы не хотите использовать' required = "required" '. –
Я хотел бы получить этот ответ для углового (2+) вопроса! – PaulCo