Я пытаюсь создать директиву для своего Углового, чтобы помочь с интеграцией полей формы. Я внедрил решение Скотта Алленса из своего Angular playbook, и он отлично работает для обычной уложенной формы.Угловая директива для горизонтальной формы бутстрапа
Мне нужно, однако, адаптировать его к горизонтальной форме. Вот мой код:
Markup
<div form-group>
<label for="name">Name</label>
<input type="text" id="name" ng-model="vm.name">
</div>
formGroup директива
function link(scope, element) {
setupDom(element[0]);
}
function setupDom(element) {
var label = element.querySelector("label");
label.classList.add("control-label");
var input = element.querySelector("input, textarea, select");
var type = input.getAttribute("type");
if (type !== "radio" && type !== "checkbox"){
input.classList.add("form-control");
}
element.classList.add("form-group");
}
function formGroup() {
return {
restrict: "A",
link: link
}
}
Выход становится:
<div form-group="" class="form-group">
<label for="name" class="control-label">Name</label>
<input type="text" id="name" ng-model="vm.name" class="form-control">
</div>
И это нормально для сложенной формы. Так как мне нужна горизонтальная форма, мой выход должен выглядеть следующим образом:
<div form-group="" class="form-group">
<label for="name" class="control-label col-sm-3">Name</label>
<div class="col-sm-9">
<input type="text" id="name" ng-model="vm.name" class="form-control">
</div>
</div>
Я пробовал много решений, и я могу заставить его работать с отдельными элементами, как вход, или текстовое поле отборные. Это становится намного сложнее, когда у меня есть что-то вроде двух переключателей внутри моей разметке вроде этого:
<div form-group>
<label>Active</label>
<div class="radio">
<label>
<input type="radio" name="active" ng-value="true" ng-model="vm.active"> Yes
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="active" ng-value="false" ng-model="vm.active"> No
</label>
</div>
</div>
Нужный выход указанного выше кода должно быть:
<div form-group class="form-group">
<label class="control-label col-sm-3">Active</label>
<div class="col-sm-9">
<div class="radio">
<label>
<input type="radio" name="active" ng-value="true" ng-model="vm.active"> Yes
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="active" ng-value="false" ng-model="vm.active"> No
</label>
</div>
</div>
</div>
Пожалуйста, обратите внимание, что вход (s) в группе форм не фиксировано. Это может быть либо один вход, текстовое поле, выбор, группа переключателей или флажков. Я потерялся за то, как я могу это сделать. Любая помощь приветствуется. Благодаря!
UPDATE
Я сделал некоторые небольшие изменения в коде Марка Веенстра, чтобы сделать это (вроде) рабочий:
function setupDom(element) {
element.classList.add("form-group");
var label = element.querySelector("label");
label.classList.add("control-label", "col-sm-3");
var input = element.querySelector("input, textarea, select");
var type = input.getAttribute("type");
if (type !== "radio" && type !== "checkbox"){
input.classList.add("form-control");
angular.element(input).wrap(angular.element('<div class="col-sm-9"></div>'));
}
var div_radio = element.querySelector("div[class='radio']");
angular.element(div_radio).wrap(angular.element('<div class="col-sm-9"></div>'));
}
Это не работает полностью, как предполагалось с несколькими входами радио, так как ему только обертывает <div>
на первый элемент радиовхода.
Выход из примера радиокнопки в моей должности, используя Marks коды:
<div form-group="" class="form-group">
<label class="control-label col-sm-3">Active</label>
<div class="col-sm-9">
<div class="radio">
<label>
<input type="radio" name="active" ng-value="true" ng-model="vm.active" value="true"> Yes
</label>
</div>
</div>
<div class="radio">
<label>
<input type="radio" name="active" ng-value="false" ng-model="vm.active" value="false"> No
</label>
</div>
</div>
РЕШЕНИЕ
ЗАКАНЧИВАТЬ Plunker с конечным результатом: http://plnkr.co/edit/Wv6V86hHTCz3URS9DhdU?p=preview
Можете ли вы поделиться с plunker показывая ваши попытки достичь этого? Тогда будет легче увидеть, где вы ошибаетесь. –
@AbhishekJain ознакомьтесь с этим [Plunker] (http://plnkr.co/edit/Wv6V86hHTCz3URS9DhdU?p=preview) для окончательного результата, если вам интересно – KlaasJan