Я установил базовое булевское связывание на радиоэлементе. Когда пользователь выбирает «истинный» радиоэлемент, он должен отображать div под ним с некоторыми дополнительными параметрами. Когда загружается представление, я хотел бы убедиться, что все элементы, которые являются «истинными», имеют отображаемый div.Пользовательская директива AngularJS обрывает привязку данных к элементу радиосвязи
До Угловое, я бы только две две вещи с JQuery:
// pseudo-ish code
$(element).on("click", function() { /* show/hide div */ });
$(element:checked).each(function() { /* show child div if val() == 'true' */}
С Угловое, мне нужна директива, чтобы сделать это. Директива делает именно то, что я хочу сделать, но она сломала привязку данных к элементу, поэтому элемент больше не проверяется, если для модели установлено значение true/false.
- Как получить привязку данных к работе снова, чтобы проверить истинное радио, а div показывает?
- Любые предложения по улучшению этой директивы/кода? Угловой новичок здесь, но ЛЮБОВЬ рамки до сих пор!
Вот скрипка, которая показывает, что:
http://jsfiddle.net/nloding/SLpBG/
Вот код:
HTML:
<div ng-app="myApp" ng-controller="testController">
<input type="radio" name="TransferControl" data-test-control required data-ng-value="true" data-ng-model="transfer" /> TRUE<br/>
<input type="radio" name="TransferControl" data-test-control data-ng-value="false" data-ng-model="transfer" /> FALSE
<div class="testcontrols">SHOW SOME STUFF HERE IF TRUE</div>
</div>
JS:
var myApp = angular.module('myApp', [])
.directive('testControl', function() {
return {
require: 'ngModel',
restrict: 'A',
replace: false,
transclude: true,
scope: {
enabled: "=ngModel"
},
link: function (scope, element) {
if (scope.enabled && element.val().toLowerCase() === 'true') {
element.nextAll('div.testcontrols').first().show();
}
element.bind('click', function() {
if (element.val().toLowerCase() === 'true') {
element.nextAll('div.testcontrols').first().show();
} else {
element.nextAll('div.testcontrols').first().hide();
}
});
return;
}
};
});
function testController($scope) {
$scope.transfer = true;
}
Я бы предпочел, чтобы держать '$ scope.transfer' как логическое значение, а не строка, из-за того, что происходит позже, когда форма была отправлена. С этой настройкой этот сценарий не работает (если я все еще не вижу чего-то). –
В этот момент Angular не будет хорошо играть с моими булевыми, так что это ответ. Вот обновленная скрипка для справки: http://jsfiddle.net/nloding/SLpBG/5/ –