我已經在無線電元素上設置了基本的布爾綁定。當用戶選擇「真正的」無線電元件時,它應該在其下方顯示一個div,並帶有其他選項。加載視圖時,我想確保所有「true」元素都顯示下面的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/ –