【问题标题】:AngularJs path not changing, even after apply即使在应用之后,AngularJs 路径也不会改变
【发布时间】:2016-09-12 09:18:46
【问题描述】:

我有一个关于通过自定义指令改变路由的问题。我设置了一个菜单栏指令并设置了一个链接功能。此函数中的所有内容都可以正常工作,但通过 $location.path 转换 URL 却不能正常工作。即使在使用$rootScope.apply 之后,它也不会改变。

define([
    '../module',
    '../namespace'
],
function (module, namespace) {
    module.directive(namespace + '.menubarDirective', function ($location,     $rootScope) {
        return {
            restrict: 'EA',
            replace: 'true',
            templateUrl: 'scripts/app/menubar/views/menubar.html',
            scope: {},
            controller: function () {
            },
            link: function (scope, element, attrs) {

                $("#menubarStoreButton").click(function () {
                    $('.active').removeClass('active');
                    $(this).addClass('active');
                    $location.path('/store');
                    $rootScope.$apply();
                })

            }
        }
    });
});

为了清楚起见,我使用 requirejs 和 $location 和 $rootScope 定义。奇怪的是,$location.path() 在替换之前给出了一个空路径。此外,“活动”类的放置按预期工作。

谢谢。

【问题讨论】:

    标签: javascript angularjs routing directive


    【解决方案1】:

    尝试使用 $timeout -

    $("#menubarStoreButton").click(function() {
        $('.active').removeClass('active');
        $(this).addClass('active');
        $timeout(function() {
            $location.path('/store');
        });
    })
    

    【讨论】:

    • 在尝试这个之后,我得到 $timeout 没有定义的错误。
    • 在你的指令中注入 $timeout,你已经注入了 $location
    • 对不起,我现在感觉很笨。我忘记将 $timeout 声明为参数。现在它按预期工作了!
    • @pD7:超时如何解决问题,还有其他方法可以实现吗?使用超时不是 CPU 密集型的吗?
    【解决方案2】:

    我想知道您的路径是否已经是 /store 并且您想重新加载页面尝试导航尝试 $window.location.href = "/store"; 参考:$location$window

    【讨论】:

    • 非常感谢您提供替代方案!
    猜你喜欢
    • 2012-12-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 2016-07-23
    • 2012-07-31
    • 1970-01-01
    相关资源
    最近更新 更多