Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular Ui路由器链接出应用程序,但在同一域中_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript angular Ui路由器链接出应用程序,但在同一域中

Javascript angular Ui路由器链接出应用程序,但在同一域中,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我正在尝试在我的angular应用程序中使用ui路由器 我的基本url是“/段”,我使用基本标记来定义它 <base href="/segments" /> 当我点击链接标签时,我无法从我的应用程序转到我网站上的其他资源,即我点击标签 <a class="" href="/widgets">Widgets</a> 然后url改变了,什么也没发生 问题:如何使用ui路由器处理指向站点上其他页面的外部链接 第一点是:默认情况下,angular handle

我正在尝试在我的angular应用程序中使用ui路由器

我的基本url是“/段”,我使用基本标记来定义它

<base href="/segments" />
当我点击链接标签时,我无法从我的应用程序转到我网站上的其他资源,即我点击标签

<a class="" href="/widgets">Widgets</a>

然后url改变了,什么也没发生


问题:如何使用ui路由器处理指向站点上其他页面的外部链接

第一点是:默认情况下,angular handle all单击一个元素,并尝试通过路由系统解析href属性的值。关于它的信息在这里

第二点是:我使用了错误的基本url。我应该使用/segments/而不是/segments/。字符串末尾的斜杠有非常重要的意义! 角度跳过不在我的基础上的链接(/segments/)

描述了其他解决方案。但我建议使用

$rootElement.off('click');
在某些控制器中,不在运行功能中。在我的例子中,在单击句柄之前调用了run函数


祝大家好运!:)

发生的情况是,ui路由器正在触发URL的
否则()
响应,因为它无法将URL与已知状态列表匹配

您可以在浏览器中看到URL更新,但由于Javascript代码中未处理该错误,因此什么也没有发生

您可以像这样为不匹配的状态添加处理程序

var stateHandler = function($urlRouterProvider)
{
    $urlRouterProvider.otherwise(function($injector, $location)
     {
         window.location = $location.absUrl();
     });
};

YourAngularApp.config(['$urlRouterProvider',stateHandler]);
当ui路由器无法匹配某个状态时,它将调用
否则()
回调。然后可以手动强制浏览器转到该URL


编辑:警告,如果URL是带有错误路由的角度路径,这将导致无限重定向循环。

对于单个元素,您可以执行以下操作:

<a href="some/url" ng-click="$event.stopPropagation()">A link outside of the app</a>

这可能会有帮助:

总而言之,您可以通过添加
target=“\u self”
来告知Angular出于路由目的忽略链接。这将允许浏览器处理不受角度限制的链接。例如:



这种方法适用于您事先知道不应该由Angular处理的链接。

在某些情况下,当我转到下一页然后尝试返回时,位置栏中的URL会更改,但页面不会更改。发生在Chrome和Safari中。还有其他人看到过吗?我一直看到这种情况发生。虽然我喜欢这种方法的一般性质,但“后退”按钮需要起作用。@HestonLiebowitz返回时,您指的是成功的路由还是失败的路由?我看到成功重定向到外部页面时会出现这种情况。事实上,单击后退按钮会更改Angular应用程序中所有先前页面的URL栏,但不会重定向到任何页面。这看起来有点像是一个浏览器错误。根据我对此所做的有限测试,如果您将其与Turbolinks结合使用(指定一个带有_self的链接似乎会导致整个页面重新加载),则不会很好。
<a href="some/url" ng-click="$event.stopPropagation()">A link outside of the app</a>