【问题标题】:AngularJS :: html5Mode + normal link behaviorAngularJS :: html5Mode + 正常链接行为
【发布时间】:2014-08-21 17:53:29
【问题描述】:

我是 Angular 的新手,目前在网站上遇到问题,我们需要 html5Mode(true),同时保持正常链接像使用 html5Mode(false) 一样工作。

我们在 html-tag 中有我们的 ng-app - 所以整个页面都在一个模块的控制之下。在某些页面上,我们需要通过 ajax 加载新内容并更改特定控制器中的底层模型。这应该将 URL 更改为新的(绝对)URL。通过 $locationProvider.html5Mode(true); 实现这一点很简单;在模块配置中。

现在的问题是:当我们激活 html5Mode 时,普通链接将不再按预期工作。有没有什么方法可以实现所需的行为,而不会将页面分割成多个模块,从而使“正常链接”超出 angular 的范围和模块的 html5Mode 设置?

我的想法是在控制器函数中简单地使用 history.pushState() 来处理内容重新加载的点击事件,但这确实会引发很多异常,甚至不起作用另一方面是正确的。

非常感谢任何想法:-)

最好的问候,SubnetOne

【问题讨论】:

    标签: javascript angularjs pushstate


    【解决方案1】:

    终于找到了解决办法:

    Module.directive('a', function () {
        return {
            restrict: 'E',
            link: function(scope, element, attrs) {
                element.attr("target", "_self");
            }
        };
    });
    

    这会将 target="_self" 广告到页面上的所有链接(锚标记)。由于角度劫持链接取决于

    !elm.attr('target') = true
    

    带有目标的链接会表现得像预期的那样。

    感谢 Niks 回答 angular.js link behaviour - disable deep linking for specific URLs 和塞巴斯蒂安回答 Conditionally add target="_blank" to links with Angular JS我终于解决了这个问题:-)

    【讨论】:

    • 你是救生员!
    猜你喜欢
    • 2016-03-18
    • 2016-01-18
    • 2014-11-21
    • 1970-01-01
    • 2015-08-21
    • 2012-11-15
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多