我已经搜索了我的方式,但无法弄清楚这一点。我制作了一个指令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>
...
我的问题似乎缺乏策略,而不是“没有完全让它发挥作用”,因此您在我上面发布的代码中看不到任何尝试。让这成为一个相当开放的问题:如何做到这一点?:) 非常感谢!