Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度相关场验证_Javascript_Html_Angularjs_Validation_Select - Fatal编程技术网

Javascript 角度相关场验证

Javascript 角度相关场验证,javascript,html,angularjs,validation,select,Javascript,Html,Angularjs,Validation,Select,我有个问题。我正在尝试为我的表单创建一个验证指令。我的验证过程有点复杂。我有4个选择(下拉列表)。第一个团队(用户和代理)有2个下拉列表,第二个团队也有相同的下拉列表 我的验证指令需要执行以下操作: 已选择用户第一团队,但不是副第一团队(需要副第一团队) 已选择副一线队,但不是用户一线队(需要用户一线队) 已选择用户第二团队,但不是副第二团队(需要副第二团队) 已选择副第二团队,但不是用户第二团队(需要用户第二团队) 未选择第一个或第二个团队的用户或代理人(至少需要一名用户或代理人) 我的htm

我有个问题。我正在尝试为我的表单创建一个验证指令。我的验证过程有点复杂。我有4个选择(下拉列表)。第一个团队(用户和代理)有2个下拉列表,第二个团队也有相同的下拉列表

我的验证指令需要执行以下操作:

  • 已选择用户第一团队,但不是副第一团队(需要副第一团队)

  • 已选择副一线队,但不是用户一线队(需要用户一线队)

  • 已选择用户第二团队,但不是副第二团队(需要副第二团队)
  • 已选择副第二团队,但不是用户第二团队(需要用户第二团队)
  • 未选择第一个或第二个团队的用户或代理人(至少需要一名用户或代理人)
  • 我的html如下所示:

            <div class="row" ng-form="reportForm" ng-model="report" require-users>                
                <!-- User First Team -->
                <div class="col-sm-3 col-xs-6">
                    <div class="form-group">
                        <label>User First Team</label>
                        <!-- Dropdown User First Team -->
                        <select ng-form="reportForm.userFirst" 
                                ng-model="report.userFirst" 
                                ng-options="user.Name for user in users track by user.Id" 
                                class="form-control">
                            <option></option>
                        </select>
    
                        <!-- Error Messages-->
                        <div ng-messages="reportForm.$error" style="color:maroon; margin-top: 4px;" role="alert">
                            <!-- Message required -->
                            <div ng-message="requireUserFirst">
                                <small>A User for the first team is required.</small>
                            </div>
                        </div>
                    </div>
                </div>
                <!-- Deputy First Team -->
                <div class="col-sm-3 col-xs-6">
                    <div class="form-group">
                        <label>Deputy First Team</label>
                        <!-- Dropdown Deputy First Team -->
                        <select ng-form="reportForm.deputyFirst" 
                                ng-model="report.deputyFirst" 
                                ng-options="user.Name for user in users track by user.Id" 
                                class="form-control">
                            <option></option>
                        </select>
    
                         <!-- Error messages -->
                        <div ng-messages="reportForm.$error" style="color:maroon; margin-top: 4px;" role="alert">
                            <!-- Message required -->
                            <div ng-message="requireDeputyFirst">
                                <small>A Deputy for the first team is required.</small>
                            </div>
                        </div>
                    </div>
                </div>
                <!-- User Second Team -->
                <div class="col-sm-3 col-xs-6">
                    <div class="form-group">
                        <label>User Second Team</label>
                        <!-- Dropdown User Second Team -->
                        <select ng-form="reportForm.userSecond" 
                                ng-model="report.userSecond" 
                                ng-options="user.Name for user in users track by user.Id" 
                                class="form-control">
                            <option></option>
                        </select>
    
                         <!-- Error messages -->
                        <div ng-messages="reportForm.$error" style="color:maroon; margin-top: 4px;" role="alert">
                           <!-- Message required -->
                            <div ng-message="requireUserSecond">
                                <small>A User for the second team is required.</small>
                            </div>
                        </div>
                    </div>
                </div>
                <!-- Deputy Second Team -->
                <div class="col-sm-3 col-xs-6">
                    <div class="form-group">
                        <label>Deputy Second Team</label>
                        <!-- Dropdown Deputy Second Team -->
                        <select ng-form="reportForm.deputySecond" 
                                ng-model="report.deputySecond" 
                                ng-options="user.Name for user in users track by user.Id" 
                                class="form-control">
                            <option></option>
                        </select>
    
                         <!-- Error messages -->
                        <div ng-messages="reportForm.$error" style="color:maroon; margin-top: 4px;" role="alert">
                            <!-- Message required -->
                            <div ng-message="requireDeputySecond">
                                <small>A Deputy for the second team is required.</small>
                            </div>
                        </div>
                    </div>
                </div>
                <!-- Error messages -->
                <div ng-messages="reportForm.$error" style="color:maroon; margin-top: 4px;" role="alert" class="col-xs-12">
                    <!-- Message missing user and deputy -->
                    <div ng-message="requireAll">
                        <small><strong>At least one user and deputy is needed.</strong></small>
                    </div>
                </div>
      </div>
    
    问题在于,只有在指令初始化时,观察程序才起作用。因此,当我更改一个值时,验证过程将不会开始。

    更新报告控制器:

    angular.module('ReportTool')
        .controller('ReportController', ['$scope', 'Report', 'User', function ($scope, Report, User) {
            var _this = this;
    
            // Load all Teammembers (API Call in Service)
            User.query().then(function (success) {
                _this.users= success.data;
            }, function (error) {
                console.log('Users could not be loaded.');
            });            
    
            // Save report
            this.save = function () {
                if (_this.report != null) {
                    // create report
                    Report.post(_this.report).then(function (success) {
                        console.log('Report created.');
                    }, function (error) {
                        console.log('Report could not be created.');
                } else {
                    console.log('Report is null.');
                }
            };
        }]);
    

    在这种情况下,您需要为每个检查编写一个指令,如
    requireUsers

    我建议使用指令。 使用它可以轻松创建自定义支票

    现场示范

    angular.module('ExampleApp',['use','ngMessages']))
    .controller('ExampleController',函数($scope){
    });
    
    。错误{
    颜色:栗色
    }
    
    用户优先:
    
    代理主席(译文):

    用户秒:
    代理主席(译文):
    至少需要一个用户和代理。 需要第一个团队的用户。 一队需要一名副手。
    您可以简单地将变量传递到指令中。然后检查一下

    活的例子

    angular.module('ExampleApp',['ngMessages']))
    .controller('ExampleController',函数($scope){
    })
    .directive('requireUsers',function(){
    返回{
    限制:“A”,
    要求:'表格',
    范围:{
    userFirst:“=”,
    deputyFirst:“=”,
    userSecond:“=”,
    deputySecond:“=”,
    },
    链接:功能(范围、要素、属性、ngModel){
    功能更改值(型号、旧型号){
    如果(!scope.userFirst&&!scope.deputyFirst&&!scope.userSecond&&!scope.deputySecond){
    ngModel.$setValidity('requireal',false);
    }否则{
    ngModel.$setValidity('requireal',true);
    }
    如果(!scope.userFirst&&scope.deputyFirst){
    ngModel.$setValidity('requireUserFirst',false);
    }否则{
    ngModel.$setValidity('requireUserFirst',true);
    }
    如果(!scope.deputyFirst&&scope.userFirst){
    ngModel.$setValidity('requireDeputyFirst',false);
    }否则{
    ngModel.$setValidity('requireDeputyFirst',true);
    }
    如果(!scope.userSecond&&scope.deputySecond){
    ngModel.$setValidity('requireUserSecond',false);
    }否则{
    ngModel.$setValidity('requireUserSecond',true);
    }
    如果(!scope.deputySecond&&scope.userSecond){
    ngModel.$setValidity('requireDeputySecond',false);
    }否则{
    ngModel.$setValidity('requireDeputySecond',true);
    }
    }
    范围:$watch('userFirst',changeValue);
    范围:$watch('deputyFirst',changeValue);
    范围:$watch('userSecond',changeValue);
    范围$watch('deputySecond',changeValue);
    }
    };
    });;
    
    。错误{
    颜色:栗色
    }
    
    用户优先:
    
    代理主席(译文):

    用户秒:
    代理主席(译文):
    至少需要一个用户和代理。 需要第一个团队的用户。 一队需要一名副手。 需要第二个团队的用户。 第二队需要一名副手。
    您是否也可以添加控制器或制作一个plunker?可能,您应该对每个输入使用指令
    requireUsers
    。@dendimiiii您到底需要控制器做什么?@stepankasysanenko如果我这样做,我就无法读取其他用户或副手,因为ng模型在每个选择元素上都不同。要自己制作一个plunker:)没有办法只使用一个吗指令?就像我在require users指令上做的那样?对我来说,将指令放在一个元素中而不是每个select元素中会容易得多。你知道我的意思吗?我又添了一个答案。请检查。抱歉,如果我太挑剔了,但我认为这个解决方案不干净,因为你必须“连接”模型。我相信有更好的解决办法。也许你知道为什么我的观察者只被执行一次,即使我改变了模型?谢谢你的帮助和时间!你的观察者观察只是为了改变你形态的价值!在代码
    中返回ngModel.$modelValue
    告诉watch表单的更改值。您的表单值与输入和选择中的
    ng model
    不同。我是update jsfiddle。现在它没有“连接”模型。为什么它采用这种形式?我写了ng model=“report”它不应该将此作为指令中的ngModel吗?您在标记中使用
    指令
    要求用户
    。然后使用
    ngModel
    。指令选择窗体,因为您在窗体中初始化了指令。您的
    ng model='report'
    没有指令
    要求用户
    。更多细节。
    angular.module('ReportTool')
        .controller('ReportController', ['$scope', 'Report', 'User', function ($scope, Report, User) {
            var _this = this;
    
            // Load all Teammembers (API Call in Service)
            User.query().then(function (success) {
                _this.users= success.data;
            }, function (error) {
                console.log('Users could not be loaded.');
            });            
    
            // Save report
            this.save = function () {
                if (_this.report != null) {
                    // create report
                    Report.post(_this.report).then(function (success) {
                        console.log('Report created.');
                    }, function (error) {
                        console.log('Report could not be created.');
                } else {
                    console.log('Report is null.');
                }
            };
        }]);