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

时间:2014-10-30 17:25:07

标签: javascript angularjs

代码看起来很简单,但在我阅读the docs for $location时,我注意到有很多我不明白的复杂性。我的设置如下:

// 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');
    });
}

我按下按钮查看提醒,但视野无变化。我再次按下按钮(第二次将数据保存到云端),我第二次看到警报,视图确实发生了变化。有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:4)

我相信你的序列中必定存在异步。 它通常在使用像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');
        });
    });
}

答案 1 :(得分:-1)

我不知道为什么?但这可能是你的html问题。如果你的html像这样:

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

然后执行href=""意味着代码应该是这样的:

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