我已经搜索了我的方式,但无法弄清楚这一点。我制作了一个指令manyToOneSelect
(自定义组件),它从服务器加载项目,将它们显示给用户并让用户选择一个。这很好用,但我不知道如果用户没有选择任何项目,如何防止表单被提交,即如何使表单无效。
以下几乎是指令:
angular.module('myApp.directives').
directive('manyToOneSelect', function(entityService) {
return {
restrict:'E',
templateUrl:'partials/control/n21select.html',
scope:{
entityName:'@',
entityField:'@',
bindVariable:'='
},
compile:function (tElement, tAttrs, transclude) {
return function (scope, element, attrs) {
var inner = element.children("#n21select");
scope.entities = [];
scope.$watch('entityName', function ($new, $old) {
entityService.getList(scope.entityName, function (data) {
scope.entities = data;
}, []);
}, true);
scope.lookup = function(uuid) {
for(var i in scope.entities) {
if(scope.entities[i].uuid == uuid) {
return scope.entities[i];
}}}}}}});
这是相应的部分partials/control/n21select.html
:
<select ng-hide="disable" ng-options="entity.uuid as entity[entityField] for entity in entities" ng-model="bindVariable" required></select>
<span ng-show="disable">{{lookup(bindVariable)[entityField]}}</span>
这是我使用指令的方式:
<form ng-href="#/" ng-submit="save()">
<many-to-one-select entity-name="customer" entity-field="name"
bind-variable="entity.customerUuid"></many-to-one-select>
...
我的问题似乎缺乏策略,而不是“没有完全让它发挥作用”,因此您在我上面发布的代码中看不到任何尝试。让这成为一个相当开放的问题:如何做到这一点?:) 非常感谢!