Javascript AngularJS$scope.form.$submitted显示true
我有一个多步骤表单,我想控制用户是否在每个步骤中提交了有效信息。我正在检查验证,如果为真,我将进入下一步,但$scope.form.$submitted显示为真,并弹出ng消息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){
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路由器?