我是angular的新手,目前在一个网站上面临着一个问题,我们需要html5Mode(true),同时保持正常的链接工作,就像使用html5Mode(false)一样。
我们将ng-app放在html-tag中,所以整个页面都在一个模块的控制之下。在某些页面上,我们需要通过ajax加载新内容,并更改特定控制器中的底层模型。这应该会将URL更改为新的(绝对)URL。通过$locationProvider.html5Mode(true);在模块配置中实现这一点是很简单的。
现在的问题是:当我们激活html5Mode时,正常的链接将不再像预期的那样工作。有没有办法在不将页面分割成多个模块的情况下实现所需的行为,从而使“普通链接”脱离angular的作用域和模块的html5Mode设置?
我的想法是在控制器函数中简单地使用history.pushState(),该函数处理content-reload的点击事件,但这一方面确实抛出了许多异常,另一方面甚至不能正常工作。
非常感谢您的任何想法:-)
致以最好的问候,SubnetOne
发布于 2014-08-22 20:24:42
最后我找到了解决方案:
Module.directive('a', function () {
return {
restrict: 'E',
link: function(scope, element, attrs) {
element.attr("target", "_self");
}
};
});这将广告一个指向页面上所有链接(锚标记)的target="_self“。由于角度的原因,链接的劫持取决于
!elm.attr('target') = true与目标的链接将按照预期的方式运行。
多亏了耐克对angular.js link behaviour - disable deep linking for specific URLs的答复和塞巴斯蒂安对Conditionally add target="_blank" to links with Angular JS的答复,我终于解决了这个问题:-)
https://stackoverflow.com/questions/25432845
复制相似问题