2014-01-10 60 views
10

我在项目中使用基于状态的路由(Angular UI路由器v0.2.7)并寻找一种方法从给定的URL字符串获取当前状态(名称)。从URL字符串获取状态与Angular UI路由器

喜欢的东西:

$state.get([urlString]) returns stateName:String or state:Object 

我需要这个方法来检查,因为并不是所有的URL映射到我的项目状态的状态存在于一个给定的URL。使用Play Framework作为后端,一些URL(例如,登录表单)不会映射到状态,因为它们使用不同的模板,然后是我的应用程序的Angular(主要)部分。 对于那些“无角”页面(即不包含在状态中),我会重新加载。为了确定一个国家未涉及的URL,我需要上面提到的方法。打算做这样的:

$rootScope.$watch(function() { return $location.path(); }, function(newUrl, oldUrl) { 
    if(newUrl !== oldUrl) { 
     if (!$state.get(newUrl)) { 
      $window.location.assign(newValue); 
     } 
    } 
} 

已经检查了docu但目前还没有这样的方法。

任何想法?

+0

该URL超出了Angularjs项目的范围吗?你能提供一个例子吗? –

+0

是的,一些URL由后端处理(Play框架)。上面添加了一些细节。 – cnmuc

+0

有一个'routes'文件可以控制谁获得什么路线。你可以在你的URL的根目录下设置angularjs'/'并将所有的API调用重定向到'/ api'。 Angularjs永远不用担心。用户不应该被授予API网址 –

回答

1

这是全部或没有。如果您打算使用ui-router,请确保您的所有URL都解析为状态。如果状态不存在,则将进入otherwise状态。可以有可选的参数。

另一种方法是使用.htaccess重定向来捕获URL并在您点击ui路由器之前将其重定向。

提供更多细节,我们可以看到最好的选择是什么。

+0

感谢您的快速回复!想想否则可以做的伎俩,我会试一试,让你知道。 – cnmuc

1

尝试使用这将获得当前状态名称。

var stateName = $state.current.name; 
相关问题