Angularjs 角度窗体:在自定义指令上设置$dirty属性
我们有一个指令(比如check按钮),它创建了一个带有特定功能的样式化复选框 我在指令中需要ng表单,因此我可以在指令中使用formCtrl,并成功地将表单设置为$dirty或$valid我的问题是如何将指令创建的特定元素设置为$valid或$dirty,并且通常作为角形元素。只是执行Angularjs 角度窗体:在自定义指令上设置$dirty属性,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我们有一个指令(比如check按钮),它创建了一个带有特定功能的样式化复选框 我在指令中需要ng表单,因此我可以在指令中使用formCtrl,并成功地将表单设置为$dirty或$valid我的问题是如何将指令创建的特定元素设置为$valid或$dirty,并且通常作为角形元素。只是执行element.$valid=false无法按Ctrl.addControl(element)中的操作,所以我被卡住了。我应该强调,这个指令是在ng repeat循环中使用的,所以我可以在它上面设置一个“名称”,因
element.$valid=false
无法按Ctrl.addControl(element)中的操作,所以我被卡住了。我应该强调,这个指令是在ng repeat循环中使用的,所以我可以在它上面设置一个“名称”,因为ng repeat可以通过编程方式设置名称(必须是字符串)
这是(简化的)模板:
<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版本(1.2.10)您基本上需要表单
和ngModel
作为表单。$addControl
需要ngModelController您不能将元素添加到表单控制器
,您需要该元素的ngModelController
。现在,你能提供一个劫掠者吗?谢谢@beyers!在两者都需要之后,我如何添加它?只需添加modelCtrl对象?@alonisser实际上不必做任何事情来注册控件,因为ngModel指令本身会注册到表单中。因此,您所需要的只是对ngMogelController的引用,这样您就可以使用它的API了。对于ngModelController API和自定义控件示例,请查看
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);
}
};
}]);