手动拒绝路线承诺不起作用

时间:2016-05-02 11:37:03

标签: javascript angularjs promise angular-routing

如果条件为真,我正在尝试手动拒绝路线,但它似乎不起作用。我想我并没有正确地拒绝它,但是当我搜索强大的谷歌时,我找不到能够正确解决这个问题的答案。

这是我的路线:

.when('/filters/edit/:id', {
    name: 'filters-edit',
    templateUrl: './assets/angular/modules/filters/filters-edit.html',
    controller: 'FiltersSingleCtrl',
    controllerAs: 'fs',
    resolve: {
        routeData: ['$q', '$route', '$location', 'utils', 'filtersApi', 'samplesApi', 'tagsApi', 'simpleCsdlData', function($q, $route, $location, utils, filtersApi, samplesApi, tagsApi, simpleCsdlData) {

            var ID = $route.current.params.id;

            var startTime = utils.getPreviousDate(30, 'yyyy-MM-dd').dateFrom + ' 00:00',
                    stopTime = utils.formatDate(utils.getDateNow(), 'yyyy-MM-dd') + ' 00:00';

            return $q.all({
                filter: filtersApi.single({id: ID}).then(function(res) {

                    res.data.versionResults[0].isAdvanced = true;

                    if (res.data.versionResults[0].isAdvanced) {

                        $location.path('/filters/edit/' + res.data.id + '/advanced');

                        $q.reject();
                    }

                    simpleCsdlData.set(res.data.versionResults[0].simpleFilterParts);
                }),
                countries: filtersApi.countries()
            });
        }]
    }
})

所以,当res.data.versionResults[0].isAdvanced为真时,我需要拒绝承诺,以便视图根本不加载,现在它加载,然后它将用户转发到另一个不是我想要的页面。 p>

如何手动拒绝承诺?

2 个答案:

答案 0 :(得分:2)

您似乎试图从成功路径(function showPreview(event) { var button = event.target; $(button).attr("disabled", "disabled"); $(button).html('<i class="fa fa-fw fa-spin fa-spinner"><i>'); setTimeout(function() { $(button).html('<i class="fa fa-fw fa-file-o"></i> Preview'); $(button).removeAttr("disabled"); }, 2000); } 回调)中拒绝filter承诺。要做到这一点,您可以将原始承诺转换为另一个将在期望事件中被拒绝的承诺(可能需要一些抛光,如下面代码中的评论所示):

.then

答案 1 :(得分:0)

我有两点建议:

  
      
  1. 有一个没有模板的“RedirectController”,但是你的filtersApi调用。在.then()内,您可以决定下一步重定向的位置。因此,不要导航到filters-edit,而是在$rootScope.on('$stateChangeStart')内禁止它,并首先导航到“重定向”。
  2.   
  3. filtersApi调用放在控制器内而不是路由中。根据我的经验,你有一个重定向在顶部   控制器,不会显示任何内容,用户将被重定向   立即
  4.   

因此,您的通话时间很有趣。也许你可以在之前的某个地方触发它,在重定向到这个特定视图时获得结果,检查那里的值,然后在FiltersSingleController中重定向。