Javascript 角度$位置更改路径第二次工作,而不是第一次

Javascript 角度$位置更改路径第二次工作,而不是第一次,javascript,angularjs,Javascript,Angularjs,代码看起来很简单,但当我阅读时,我注意到其中有很多我不理解的复杂性。我的设置如下: // in app.js $routeProvider.when('/done' , {templateUrl: 'partials/done.html', controller: 'DoneController'}); // in my controller where $location is injected, on a button press... if (!$scope.errors.len

代码看起来很简单,但当我阅读时,我注意到其中有很多我不理解的复杂性。我的设置如下:

// in app.js
$routeProvider.when('/done'     , {templateUrl: 'partials/done.html', controller: 'DoneController'});

// in my controller where $location is injected, on a button press...
if (!$scope.errors.length) {
    $scope.model.save().then(function() {
        alert("did I get here?");
        $location.path('/done');
    });
}

我按下按钮,看到警报,但视图中没有变化。我第二次按下按钮(第二次将数据保存到云),第二次看到警报,视图确实发生了变化。你知道为什么吗?提前谢谢。

我不知道为什么?但这可能是您的html问题。如果您的html如下所示:

<a href="#" class="btn" ng-click="myFunction()">submit here</a>
<a href="" class="btn" ng-click="myFunction()">submit here</a>

我不知道为什么?但这可能是您的html问题。如果您的html如下所示:

<a href="#" class="btn" ng-click="myFunction()">submit here</a>
<a href="" class="btn" ng-click="myFunction()">submit here</a>

我相信在你的序列中一定有一些不同步的东西。 它通常发生在使用外部库(如jQuery)时

问题在于,外部库事件不会触发角度循环的
$watch->$digest->$apply
。因此,改变已经发生了,但angularjs没有传播

使用
$scope.$apply()
将解决您的问题

if (!$scope.errors.length) {
    $scope.model.save().then(function() {
        alert("did I get here?");
        $scope.$apply(function(){
          $location.path('/done');
        });
    });
}

我相信在你的序列中一定有一些不同步的东西。 它通常发生在使用外部库(如jQuery)时

问题在于,外部库事件不会触发角度循环的
$watch->$digest->$apply
。因此,改变已经发生了,但angularjs没有传播

使用
$scope.$apply()
将解决您的问题

if (!$scope.errors.length) {
    $scope.model.save().then(function() {
        alert("did I get here?");
        $scope.$apply(function(){
          $location.path('/done');
        });
    });
}

你能贴一张小提琴来显示你的问题吗?你的控制器中有“解决方案”吗?另外,如果将$location.path('/done')包装在$scope.$apply?@AlexHv-没有解析,但包装在$apply中有效,那会怎么样。知道为什么吗?你能把它作为一个答案吗?你能不能贴一把小提琴来显示你的问题?你的控制器里有“解决方案”吗?另外,如果将$location.path('/done')包装在$scope.$apply?@AlexHv-没有解析,但包装在$apply中有效,那会怎么样。知道为什么吗?你能把它作为一个答案吗?我同意当异步事件从Angular框架中生成时,$scope.apply可能是重复的,我确信他调用$scope.model.save()就是这样。但是$timeout是Angular框架的一部分,您不应该在$timeout回调中使用$scope.$apply。我想这就是$timeout的意义。哥们,你完全正确,对此感到抱歉。我是正确的。另一方面,你可以用setTimeout()来说明,它是最基本的调用,既有异步调用,也有框架外调用。是的,我想我把这两个都弄混了!谢谢你的精确性:-)谢谢。My model.save()最终调用parse.com,符合您关于框架之外的理论。我想我已经通过在github上发现的一个项目将解析API包装在angular Promissions中,但是现在调查,我发现代码没有运行。感谢这些提示(也感谢@zrz)。我同意在Angular框架中生成异步事件时,$scope.$apply是一种方法,我确信他对$scope.model.save()的调用就是这样。但是$timeout是Angular框架的一部分,您不应该在$timeout回调中使用$scope.$apply。我想这就是$timeout的意义。哥们,你完全正确,对此感到抱歉。我是正确的。另一方面,你可以用setTimeout()来说明,它是最基本的调用,既有异步调用,也有框架外调用。是的,我想我把这两个都弄混了!谢谢你的精确性:-)谢谢。My model.save()最终调用parse.com,符合您关于框架之外的理论。我想我已经通过在github上发现的一个项目将解析API包装在angular Promissions中,但是现在调查,我发现代码没有运行。谢谢你的提示(也谢谢@zrz)。