UI路由器刷新页面而不是状态更改

时间:2016-07-28 16:18:23

标签: angularjs angular-ui-router

我对这个特殊问题没有运气。我所查看的所有内容都与遇到问题并尝试过问题的人有关。刷新页面而不是我每次进入某个状态时刷新的问题。这只发生在IE浏览器中而不是Chrome。

代码:

app.config(function ($stateProvider, $urlRouterProvider) {
    $stateProvider
        .state('box', {
            templateUrl: templatePath + 'box.html',
            controller: 'BoxController',
            controllerAs: 'box',
            url: '/Box/{folder:string}'
        })
        .state('compose', {
            templateUrl: templatePath + 'compose.html',
            controller: 'ComposeController',
            controllerAs: 'compose',
            url: '/Compose/{messageSentId:int}'
        })
        .state('view', {
            templateUrl: templatePath + 'view.html',
            controller: 'ViewController',
            controllerAs: 'view',
            url: '/Box/{folder:string}/{messageId:string}/{messageSentId:string}'
        });

    $urlRouterProvider.otherwise('/Box/');
});

问题出在我的撰写状态。如果我像这样直接进入那个州:

vm.compose = function () {
   $state.go('compose', { messageSentId: 0 }, { notify: true });
};

它运作得很好。但是,如果我在0之外添加一个不同的数字并从另一个controller调用它不起作用:

vm.reply = function() {
   var id = Math.floor($stateParams.messageSentId);
   $state.go('compose', { messageSentId: id }, { notify: true });
};

我想也许它有问题,因为它认为id是一个字符串,因此与/Compose/{messageSentId:int}不匹配所以我添加了Math.floor()但是没有#39}帮助。

需要注意的是,如果我首先触发我的compose函数并转到该状态,则回复函数将起作用。但是,如果我尝试使用我的回复功能导航,则首先重新加载页面。

我可以确认的另一件事是我的controller页面和页面本身加载得很好。您实际上可以看到弹出的表单。问题是,controller加载后会触发刷新。没有错误。没什么。简单地在IE中失败。

1 个答案:

答案 0 :(得分:0)

After many hours of research and having found nothing similar to my issue on the web I made a simple change. I moved my state change out of my controller and used ui-sref instead:

Code:

<div class="btn-group pull-right" ng-if="view.canReply()">
    <a class="btn btn-primary" ui-sref="compose({messageSentId: view.replyMessageId})">
        <i class="fa fa-reply"></i> Reply
    </a>
</div>

Where 'view' is my controllerAs since I don't use $scope and I set my $stateparameter on the variable replyMessageId. Maybe this will help someone.