我們有一個指令(讓我們說檢查按鈕)創建一個帶有某些特定功能的樣式複選框。
我要求在指令中使用ng-form,所以我可以在指令中使用formCtrl,並且我成功地將表單設置爲$ dirty或$ valid。 我的問題是如何將指令創建的特定元素設置爲$ valid或$ dirty,並且通常表現爲角度表單元素。只是做element.$valid = false
不起作用fromCtrl.addControl(element)
所以我卡住了。我應該強調,這個指令是在ng-repeat循環中使用的,所以我可以在其上設置一個「名稱」,因爲ng-repeat可以通過編程設置一個名稱(必須是字符串)
這是simplfied)模板:
<div class="check-button ">
<div c" ng-class="{ 'active': value != undefined ? btnState == value : btnState }">
<i class="icon-ok"></i>
</div>
<div class="pull-left btn-label" ng-transclude></div>
</div>
,這是代碼:
angular.module('our.directives').directive('checkButton', [function() {
return {
restrict: 'A',
require:'?^form', //may be used outside a form
templateUrl: '/tempalte/path/tpocheckbutton.html',
scope: {
btnState: '=ngModel',
value: '=radioBtn'
},
replace: true,
transclude: true,
link: function($scope, $element, $attrs, formCtrl) {
if(formCtrl){
formCtrl.$addControl($element)//doesn't work
}
$scope.$watch(function() {
return $scope.btnState;
}, function(newValue) {
$scope.btnState = newValue;
});
var _onElementClick = function() {
if($scope.value != undefined) {
$scope.btnState = $scope.value;
} else {
$scope.btnState = !$scope.btnState;
}
if(formCtrl){
// $element.$dirty = true;//doesn't work
formCtrl.$setDirty(); //does set the form as dirty - but not the field
}
};
$element.find('.button, .btn-label').on('click', _onElementClick);
}
};
}]);
我們使用的是最新版本的角度(1.2.10)
您無法將元素添加到「formController」,您需要請求該元素的「ngModelController」。現在,你可以提供一名運動員嗎? –