AngularJS,ui-sref-opts无法帮助重新加载应用

时间:2015-09-18 21:22:31

标签: javascript angularjs angular-ui-router

在这种情况下,我有点困在这里,我需要在从一个“项目”转换到另一个“项目”时重新加载我的应用程序。我尝试了很多东西,而且我一直在寻找解决方案。

我的应用程序有点复杂,如果我在一个孤立的场景中尝试这个,它可以正常工作。 http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.directive:ui-sref

<li ng-repeat="project in app.projects" ng-cloak>
    <a ui-sref="app.channel({projectId:project.id, channelId: project.channels[0].id})" ui-sref-opts="{reload: true, notify: true}" class="active">
        <span>{{ project.name }}</span>
    </a>
</li>

重要的部分是:

ui-sref-opts="{reload: true, notify: true}

在我的路线文件中,我有许多嵌套路线和视图,我也设置了自定义验证器。当我剥离大部分时,它可以工作。这就是为什么我不能在Codepen或类似的东西上发布任何代码示例。

现在我的问题是,UI-Router在与验证器一起使用时是否存在任何已知问题,或者是否有任何其他原因,为什么ui-sref-opts不会重新加载页面?

对于那种非特定问题感到抱歉,但也许有人可以帮助我。

编辑:更多信息和代码

好的,我会尽力向您提供相关信息。

这就是我的config.router.js的设置方式。

angular.module('app')
.run(
    // Authenicator is in here
)
.config(
    ['$stateProvider', '$urlRouterProvider', 'JQ_CONFIG', '$authProvider',
        function($stateProvider, $urlRouterProvider, JQ_CONFIG, $authProvider) {
            // ...

            .state('app.channel', {
                url: '/projects/{projectId}/{channelId}',
                views: {
                    '': {
                        templateUrl: 'tpl/channel/index.html'
                    }
                },
                resolve: {
                    deps: ['$ocLazyLoad',
                        function($ocLazyLoad) {
                            return $ocLazyLoad.load('angularFileUpload').then(
                                function() {
                                    return $ocLazyLoad.load([

                                    ]);
                                }
                            );
                        }
                    ]
                }
            })

            // ...
        }
    ]
);

1 个答案:

答案 0 :(得分:0)

它可能取决于指令cache-view="false"。通常,您必须将其放在您要访问的页面中的<ion-view>指令中,例如tpl/channel/index.html。但是如果你有嵌套视图,你应该把它放在每个视图中。

我在嵌套标签视图中遇到了同样的问题。我有一系列标签,其中一个是另一个有两个标签的视图。

<ion-tabs class="tabs-icon-top tabs-color-active-positive">

    <!-- Home Tab -->
    <ion-tab title="MY FEED" icon-off="ion-ios-home-outline" icon-on="ion-ios-home" ui-sref="main.wall">
        <ion-nav-view name="tab-wall"></ion-nav-view>
    </ion-tab>

    <!-- Messages Tab -->
    <ion-tab title="MESSAGES" icon-off="ion-ios-email-outline" icon-on="ion-ios-email"  ui-sref="main.message-tabs" ui-sref-opts="{reload: true, notify: true}">
        <ion-nav-view name="tab-messages"></ion-nav-view>
    </ion-tab>
</ion-tabs>

为了重新加载工作,我必须将指令cache-view="false"放在容器

<ion-view cache-view="false">
    <ion-tabs class="tabs-color-active-positive tabs-striped tabs-message tabs-top">

    <!-- Message Tab -->
    <ion-tab title="MESSAGES"  ui-sref="main.message-threads" ui-sref-opts="{reload: true, notify: true}">
        <ion-nav-view name="subtab-messages"></ion-nav-view>
    </ion-tab>

    <!-- Notification Tab -->
    <ion-tab title="NOTIFICATIONS" ui-sref="main.notifications">
        <ion-nav-view name="subtab-notifications"></ion-nav-view>
    </ion-tab>

</ion-tabs>

并在页面中

<ion-view view-title="Message Threads" class="threads" cache-view="false">
    <ion-content class="has-tabs has-tabs-top">
...