我正在尝试创建一个简单的指令,我可以将其应用于现有的无线电输入以使其可取消选择...它不太有效,因为该指令没有正确跟踪先前单击的值。目标是将单选设置为“真”、“假”,或者如果当前选择的值与前一个相同,则为空(例如,单击“真”两次将取消设置单选并将模型值设置为空)。它似乎不断忘记设置为未定义的先前值。我想我可能会提出某种范围界定问题,但我不确定。
这是指令:
angular.module('App').directive('deselectableRadio', function() {
return {
restrict: 'A',
scope: {
model: '=ngModel'
},
link: function(scope, element, attr) {
var previousValue = angular.copy(scope.model);
element.bind('click', function(e) {
determineState(element[0]);
});
function determineState(elem) {
if (elem.checked && elem.value == previousValue) {
elem.checked = false;
scope.model = null;
}
previousValue = angular.copy(scope.model);
}
}
}
});
这是HTML:
<div class="app-radio">
<input type="radio" name="toggle" id="toggle-yes" value="true"
ng-model="props['toggle']" deselectable-radio>
<label for="toggle-yes">Yes</label>
</div>
<div class="app-radio">
<input type="radio" name="toggle" id="toggle-no" value="false"
ng-model="props['toggle']" deselectable-radio>
<label for="toggle-no">No</label>
</div>