角度路由而不改变位置

时间:2013-03-13 17:37:56

标签: javascript angularjs google-chrome-app

Chrome Packaged Apps拥有相当严格的内容安全政策。其结果之一是操纵位置(如点击链接)会导致:

'Can't open same-window link to "chrome-extension://lkjasdfjklbdskjasdfjkhfdshjksad/derp.html"; try target="_blank". '

目标_blank将打开chrome中的链接,这不是我想要的。 AngularJS的路由可以在这样一个锁定的环境中工作吗?

他们的文档提供了一个Angular应用的an example,但显然没有使用路由。

更新

以下链接在点击时会显示错误:<a class='walrus-link' ng-href='paystubs/{{walrus.id}}'>Walrus {{id}}!</a>

2 个答案:

答案 0 :(得分:8)

尝试使用ng-click并向控制器调用方法,而不是使用href,使用$ location重新定位到相应的页面。请参阅AngularJS site上的文档。来自doc的以下引用表明$ location服务可能适合您:

  

我应该何时使用$ location?任何时候您的应用程序需要做出反应   更改当前URL或您想要更改当前URL   浏览器中的URL。

您的代码可能如下所示:

<a class='walrus-link' ng-click='getPaystub(walrus.id)'>Walrus {{id}}!</a>

在你的父控制器中,你需要一个名为'getPaystub'的范围方法,其方法类似于:

$scope.getPaystub = function(selectedWalrusId) {
  $location.path('paystubs/'+$scope.walrus.id);
}

这样,angular保持控制,不会导致页面刷新。这有望使您保持在CSP的范围内。不幸的是,我不能在一个打包的应用程序中测试它,但我在Web应用程序中使用了完全相同的约定,它只是花花公子。

答案 1 :(得分:0)

当我没有使用$ routeProvider的html5模式(默认情况下禁用)时,

路由在我的Chrome应用程序中工作,你只需要在网址中使用哈希。

所以我的链接看起来像这样:

<a href="#about">About</a>

$ routeProvider配置如下:

$routeProvider.when('/about', {templateUrl:'about.html'})