Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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 AngularJS$scope.form.$submitted显示true_Javascript_Jquery_Angularjs_Forms - Fatal编程技术网

Javascript AngularJS$scope.form.$submitted显示true

Javascript AngularJS$scope.form.$submitted显示true,javascript,jquery,angularjs,forms,Javascript,Jquery,Angularjs,Forms,我有一个多步骤表单,我想控制用户是否在每个步骤中提交了有效信息。我正在检查验证,如果为真,我将进入下一步,但$scope.form.$submitted显示为真,并弹出ng消息 function stepForward(step){ console.log($scope.AdvertiserRegistration.$valid); if($scope.AdvertiserRegistration.$valid){

我有一个多步骤表单,我想控制用户是否在每个步骤中提交了有效信息。我正在检查验证,如果为真,我将进入下一步,但$scope.form.$submitted显示为真,并弹出ng消息

function stepForward(step){
            console.log($scope.AdvertiserRegistration.$valid);
            if($scope.AdvertiserRegistration.$valid){
                var t = setTimeout(function(){
                    $scope.AdvertiserRegistration.$submitted = false;
                },3000);
                window.location = '#/advertiser/register/step'+step;
            }

        }
这是我的功能,但它不起作用:

console.log($scope.advertizerregistration.$valid)
返回True


任何解决方案?

使用angular时,任何异步操作都会使您脱离angular摘要周期,因此angular团队为这些操作提供服务,其中之一是
$timeout
,请将代码更改为:

function stepForward(step){
            console.log($scope.AdvertiserRegistration.$valid);
            if($scope.AdvertiserRegistration.$valid){
                //YOU NEED TO INJECT $timeout
                var t = $timeout(function(){
                    $scope.AdvertiserRegistration.$submitted = false;
                },3000);
                window.location = '#/advertiser/register/step'+step;
            }

        }

使用angular时,任何异步操作都会使您脱离angular摘要周期,因此angular团队为这些操作提供服务,其中之一是
$timeout
,请将代码更改为:

function stepForward(step){
            console.log($scope.AdvertiserRegistration.$valid);
            if($scope.AdvertiserRegistration.$valid){
                //YOU NEED TO INJECT $timeout
                var t = $timeout(function(){
                    $scope.AdvertiserRegistration.$submitted = false;
                },3000);
                window.location = '#/advertiser/register/step'+step;
            }

        }

使用$scope.AdvertiserRegistration.$submitted=false,您试图实现什么?您确实意识到您的window.location会立即发生,而$submitted只会在3秒钟后更新(我假设您模拟服务器回发3秒?).那么@wdanda在这种情况下你有什么建议?取决于你想做什么。您是否尝试在服务器端验证每个步骤,以查看用户是否输入了有效数据?如果是这种情况,我不会立即将用户发送到下一步,我会呼叫服务器(并显示“请稍候”消息),一旦呼叫解决,您可以显示错误消息,或者如果成功(即用户数据有效),然后再重定向到下一步。@wda不,我不验证此服务器端。我想要的是一个更简单的解决方案,而不需要:var t=setTimeout(函数(){$scope.AdvertiserRegistration.$submitted=false;},3000);仅适用于:$scope.AdvertiserRegistration.$submitted=false;因为你说window.location='#/advertiser/register/step'+step;这里有麻烦。那么如何替换window.location='#/advertiser/register/step'+step;在这种情况下,是否要使用ui路由器?使用$scope.AdvertiserRegistration.$submitted=false,您试图实现什么?您确实意识到您的window.location会立即发生,而$submitted只会在3秒钟后更新(我假设您模拟的服务器回发时间为3秒?).那么@wdanda在这种情况下你有什么建议?取决于你想做什么。您是否尝试在服务器端验证每个步骤,以查看用户是否输入了有效数据?如果是这种情况,我不会立即将用户发送到下一步,我会呼叫服务器(并显示“请稍候”消息),一旦呼叫解决,您可以显示错误消息,或者如果成功(即用户数据有效),然后再重定向到下一步。@wda不,我不验证此服务器端。我想要的是一个更简单的解决方案,而不需要:var t=setTimeout(函数(){$scope.AdvertiserRegistration.$submitted=false;},3000);仅适用于:$scope.AdvertiserRegistration.$submitted=false;因为你说window.location='#/advertiser/register/step'+step;这里有麻烦。那么如何替换window.location='#/advertiser/register/step'+step;在这种情况下,如何使用ui路由器?