我正在尝试为下拉列表创建一些指令:<drop-down-list />
。对指令中的表单的角度访问
首先,我不知道如何给每个<select>
一个独特的名称。其他SO答案表明,我不能动态地命名控件,而是将每个<select>
包装在它自己的<form>
(或ng-form
)中。
我无法执行验证,因为在我的指令的$scope
内我没有访问表单的权限。为什么表单没有出现在指令范围中?我是否应该以自己的形式包装每个<select>
?
这是模板HTML:
<div class="row">
<div class="col-md-12">
<form name="formDDL" novalidate>
<div class="col-md-6">
<label for="ddl">{{title}}</label>
</div>
<div class="col-md-6" data-ng-class="getControlStatus(formDDL.ddl)">
<select
name="ddl"
data-ng-options="i.{{keyField}} as i.{{textField}} for i in itemSource | orderBy: orderBy"
data-ng-model="model"
data-ng-required="isRequiredCallback"
class="form-control">
<option value="">{{defaultText}}</option>
</select>
<span data-ng-show="hasRequiredError(formDDL.ddl)" class="error">{{getRequiredErrorMessage()}}</span>
</div>
</form>
</div>
</div>
这是指令代码:
application.directive('dropDownList', ['baseUrl', function (baseUrl) {
return {
restrict: 'E',
templateUrl: baseUrl + '/Content/templates/dropdownlist.html',
transclude: false,
replace: true,
scope: {
title: '@',
orderBy: '@',
keyField: '@',
textField: '@',
defaultText: '@',
requiredMessage: '@',
model: '=',
itemSource: '=',
isRequired: '=',
enableValidation: '='
},
controller: function ($scope) {
$scope.isRequiredCallback = getCallback($scope.isRequired, false);
$scope.isValidationEnabled = getCallback($scope.enableValidation, false);
$scope.getControlStatus = function (control) {
if (!$scope.isValidationEnabled() && !control.$dirty) {
return {};
}
return {
'has-success': !control.$error.required,
'has-error': control.$error.required
}
};
$scope.hasRequiredError = function (control) {
if (!$scope.isValidationEnabled() && !control.$dirty) {
return false;
}
return control.$error.required;
};
$scope.getRequiredErrorMessage = function() {
return $scope.requiredMessage;
};
}
};
}]);
可以忽略getCallback
功能:它只是处理绑定的值是一个布尔或一个函数。
请提供Plunker /小提琴与您的问题。谢谢 –