2013-03-09 199 views
1

我有一个angular.js控制器(loginErrorCtrl),当从输入提供的数据等于应用中定义的指定字符串时,它应该重定向到视图(/menu)(Data.serverToken )。在Angular.js中不能工作的路由

function loginErrorCtrl($scope, Data, $location) { 
    $scope.data = Data; 
    $scope.validateToken = function(token) { 
    if (token != null) { 
     if (token.length == 4) { 
     if (token == Data.serverToken) { 
      $location.path('/menu'); 
      } else { 
      //error 
      return "Invalid Token please try again"; 
     } 
     } 
    } 
    }; 
} 

的问题是,当我键入正确的令牌到输入框中$location.path('/menu')不重定向,直到我打的回退。如何在成功验证令牌后重定向它?

守则plunker上市:Angular JS routing

+1

尝试在设置路径后添加'$ scope。$ apply()'。我没有下载你的代码,但听起来你可能会在Angular之外调用validateToken()。按键将触发摘要循环。 – 2013-03-09 22:26:22

+0

@MarkRajcok它仍然不起作用。我得到一个错误:'TypeError:Object#'Object'中没有方法'apply' $ scope.validateToken' – pkanane 2013-03-09 22:31:53

+0

确实,scope没有'apply'方法,但是它有'$ apply '方法 - 你可能错过了'$'。 – 2013-03-09 22:34:22

回答

1

正确答案是把$范围$适用(),马克建议中,像这样的评论 :

function loginErrorCtrl($scope, Data, $location) { 
$scope.data = Data; 
$scope.validateToken = function(token) { 
if (token != null) { 
    if (token.length == 4) { 
    if (token == Data.serverToken) { 
     $location.path('/menu'); 
     $scope.$apply() 
     } else { 
     //error 
     return "Invalid Token please try again"; 
    } 
    } 
} 
}; 
} 

corrected code