当前位置: 首页 > 面试题库 >

基于查询参数更改,禁止重新加载基于UI路由器的视图

宗政坚白
2023-03-14
问题内容

更新的问题

标题中的问题仍然存在-是否有可能捕获?parameters和取消视图重载。

原始问题 :我需要为应用程序添加锚点支持(主题的锚点)。

这是我的距离:

angular.module('app.topics', [
    'ui.state',
    'ui.router',
    'restangular'
    'app.topics.controllers'
])
.config(function config($stateProvider) {
    $stateProvider.state('viewtopic', {
        url: '/topics/:slug?section',
        onEnter: function($stateParams) {
            // Works, as state has been reloaded.
            console.log('$stateParams', $stateParams);
        },
        resolve: {
            topic: function ($stateParams, Topic) {
                // Wrapper around Restangular. Returns promise.
                return new Topic().get($stateParams.slug);
            }
        },
        views: {
            'main': {
                controller: 'TopicCtrl',
                templateUrl: 'topics/templates/details.tpl.html'
            },
            'sidebar': {
                controller: 'SidebarCtrl',
                templateUrl: 'topics/templates/sidebar.tpl.html'
            }
        }
    });
});

angular.module('app.topics.controllers', [])
    .controller('TopicCtrl', function ($scope, topic, $rootScope, $location,
                                         $anchorScroll, $stateParams) {
        $scope.topic = topic;
        $scope.slug = $stateParams.slug;
        $scope.section = $stateParams.section;
        // ..

        $scope.$watch('$stateParams.section', function (newValue, newValue) {
            // Does not work.
            console.log('stateParams.section changed', newValue, newValue);
        });
    });

我的根本问题是,当我单击带有的链接时#/topics/slug- name?section=section-1,状态会完全重新加载,这反过来又重新请求Topic的数据。如何仅“刷新”查询参数(并在控制器中捕获该事件)却不重新加载状态(以保持数据加载)?

编辑

对于我的问题,有一个相当简单的解决方案,但我没注意到-根据有关“
Hashbang和HTML5模式”的AngularJS文档 -可以通过访问最后一个哈希,并且可以通过$location.hash()滚动启动$anchorScroll()

所以我目前的解决方案是:

在控制器中:

$scope.$watch('$location.hash', function () {
    _.defer($anchorScroll);
});

需要延迟,因为可能尚未解析内容并且没有ID。

在模板中,我只需要将target设置为#/topics/slug-name#section-name


问题答案:

您是否reloadOnSearch在路线定义中尝试过参数?

{
    route:'/',
    resolve: {
        templateUrl:'template.html',
        reloadOnSearch: false
    }
},


 类似资料:
  • 问题内容: 可通过API访问的服务器数据库中的示例实例: 场景1: 用户视图和控制器:http:// localhost / john-smith 方案2: 公司视图和控制器:http:// localhost / microsoft- technologies 现在,我想根据从API调用到服务器的数据段创建动态状态。 我写了一个 假想的代码。 但是我没有办法实现 问题答案: 有一个工作的傻瓜。

  • 我希望使用相同的路由路径,根据用户角色为我的用户加载稍微不同的视图。 以前,我已经加载了基于当前域的不同路由: 这种方法只依赖于子域,子域在创建时可用,因此所有内容都可以是同步的。我必须对用户进行身份验证,根据其角色加载正确的路由,然后导出路由器以初始化vue应用程序。 理想情况下,我可以加载基于用户角色的,,,其中可以包含角色的所有路由定义。 我正在使用Feathers-vuex,但我似乎不能等

  • 问题内容: 我在应用程序中使用了出色的模块。作为此过程的一部分,我使用命名视图来管理应用程序中的“动态子导航”。 考虑以下: 用户首次访问该应用程序时,系统会向他们显示人员列表。当他们单击某个人时,他们将被带到详细信息页面。很基本的东西。如果有帮助,这是标记… 但是,调用REST服务以获取人员列表,因此在查看人员时,用户可以导航同级元素。使用上述方法会导致模板和控制器重新呈现,因此每次单击后都会产

  • 有没有可能--在中也这样做? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路由是,在保存时显示,并且要将路由(23-是新项的id存储在数据库中)

  • 问题内容: 当前,我们的项目正在使用default ,而我正在使用此“ hack”来进行更改,而无需重新加载页面: 和在 我想到的替换用筑巢路线,但无法找到这。 有可能吗? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路线是在SAVE 之后显示的,我想将路线更改为(23-是存储在db中的新项目的id) 问题答案: 只需使用即可代替 。内部调用,但会自动将选项设置为。您可以呼叫和设置。例如

  • 我有一个组件,它显示了可以使用url查询参数过滤的项目列表,这些项目从api分页,如果设置了过滤器,我需要再次调用第一个页面,这个第一次调用是在路由器的解析器中,所以我需要的是路由器以相同的方式重新加载,就像我来自其他URL一样。 app.routes.ts app.resolver.ts app.component.ts app.service.ts 其他.ts组件