【问题标题】:AngularJS: how to preventDefault() of an event after promise completes?AngularJS:承诺完成后如何防止事件的默认()?
【发布时间】:2013-05-18 18:00:28
【问题描述】:

我有一些这样的代码:

$scope.$on("$locationChangeStart", function(event, newPath, oldPath) {

    // Do some sync checks
    if (!$scope.isPageAllowed($location.path()))
    {
        // Prevent default for some reason
        event.preventDefault();
    }
});

当我尝试像这样解决 promises 时:

$scope.$on("$locationChangeStart", function(event, newPath, oldPath) {

    // Do some async checks
    $scope.fooPromises().then(function (data) {

         // Prevent default for some reason when promises resolved (only if resolved)
         event.preventDefault();
    });
});

我成功获得了event(因为异步执行),过了一段时间,event 被解决,promises 被解决。

有没有办法将event 与我的promises 链接起来,所以它会在promise 被解决后被阻止,而不是在函数结束后被阻止?

【问题讨论】:

    标签: events angularjs promise angularjs-routing


    【解决方案1】:

    抱歉,这不起作用:-)。事件是完全同步的。

    您正在寻找 $route.resolve。异步解析/拒绝路由,为控制器提供数据或只是为了检查。

    http://www.egghead.io/video/Kr1qZ8Ik9G8

    【讨论】:

    • 感谢您的回复@andy-joslin,我找到了这个解决方案,但位置有问题。当我拒绝承诺时,没有按预期触发任何操作,但 URL 仍然更改。这就是我查看 $locationChangeStart 事件的原因 - 它在位置路径更改之前触发,因此我可以防止 URL 发生视觉变化(无闪烁)。如果存在拒绝解决也可以防止 URL 更改的情况 - 您的帮助将不胜感激。 (抱歉英语不好)
    • 嗨 Felikz,抱歉迟到了。 $routeChangeError 事件将为您提供先前和尝试的路由对象作为参数。您可以从上一个路由对象中获取上一个路由的路径,并使用$location.path() 将用户重定向回那里,并显示错误。
    • 已经试过了。此对象包含精确的 data of .when('/path/:maybe_with_params', { /* data */ }) 不包含精确的 path :( 还尝试了 $locationChangeSuccess 事件来处理此问题。但它返回absolute url 这是解析它的问题(非常肮脏的方式,恕我直言)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多