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

Angular ui.router重新加载父templateProvider

夹谷琨
2023-03-14
问题内容

我有一个抽象的基本模板,可根据用户类型加载导航。这部分适用于初始加载。问题是用户登录或注销后无法重新加载父templateProvider。我在这里尝试了重新加载父模板的解决方案,但是导航模板不受影响。有没有一种方法可以重新加载templateProvider,或者这样做的更好的方法?理想情况下,我不必将导航提供商添加到每个子路线。

路线:

$stateProvider
        .state('base', {
            abstract: true,
            views: {
                content: {
                    template: '<ui-view></ui-view>',
                },
                nav: {
                    templateProvider: function ($templateFactory, User, $stateParams){
                        if(User.exists()){
                            var url = '/static/html/navs/' + User.get.type + '.html';
                            return $templateFactory.fromUrl(url);
                        }
                        else{
                            return false;
                        }
                    }
                }
            }
        })

        .state('base.index', {
            url: '/',
            controller: 'loginController',
            templateUrl: 'static/html/landing/login.html'
        })

尝试从github问题发出的控制器功能:

scope.login_submit = function(e){
    e.preventDefault();
    User.login(scope.login, function(res){
         $state.transitionTo(
             'base.dashboard', null, 
             {reload: true, inherit: true, notify: true }
         );
    });
};

问题答案:

我在这里创建了工作示例。

这将是调整后的状态def:

.state('base', { 
    abstract: true,
    views: {
        '': {
            template: '<ui-view></ui-view>',
        },
        /*
        nav: {
            templateProvider: function ($templateFactory, User, $stateParams){
                if(User.exists()){
                    var url = '/static/html/navs/' + User.get.type + '.html';
                    return $templateFactory.fromUrl(url);
                }
                else{
                    return false;
                }
            }
        },*/
        nav: {
          templateProvider: ['User', '$templateRequest', function(User, templateRequest){

            var tplName = 'templates/templateNotExists.html';

            if(User.exists) {

              tplName = 'templates/templateExists.html';
            }

            return templateRequest(tplName); 
          }],
        },
    }
})

如我们所见,我们使用名为的 功能 '$templateRequest' ,基于URL从服务器获取html模板。

这些是控制器和服务

.controller('loginController', ['$scope', 'User', function ($scope, User) {
  $scope.User = User;
}])
.factory('User', function(){   return { exists: false, }; })

这是子“ base.index”状态的模板的内容:

<input type="checkbox" ng-model="User.exists" />
<button ng-click="$state.go('base.index', null, {reload: true})" >reload</button>

在这里检查所有动作



 类似资料:
  • 问题内容: 我在iframe中有我的登录页面,并希望在iframe中使用ajax和jquery重新加载父窗口而不刷新,但是我遇到这样的错误 请帮忙! 问题答案: 我可以通过使用javascript重新加载页面来实现 然后我触发了一个触发器以打开目标iframe 我需要一个特殊条件的系统。这可能会帮助处于类似状况的其他人。

  • 问题内容: 我知道这很长,但是我需要在主要问题之前提供一些背景信息。我正在创建一个页面,该页面将分为两列。这是ui路由器代码: 基本上,用户将过渡到状态,该状态具有如下所示的模板: 将为用户显示两列。左列仅具有一个输入字段和按钮,按下该按钮会将用户转换到状态。 当我们转换到状态时,其控制器将调用,这将在右列中设置其嵌套视图。该状态将首先以随机顺序解析数字数组,然后将其作为参数传入控制器。所述然后部

  • 问题内容: 这是一个非常基本的问题-但我无法通过在线搜索找到答案。 我正在使用python控制ArcGIS,并且有一个简单的python脚本,该脚本调用了一些预先编写的代码。 但是,当我对预写代码进行更改时,它似乎没有导致任何更改。我导入了此模块,并尝试刷新它,但是没有任何反应。 我什至将它调用的文件移到了另一个位置,脚本仍然可以正常工作。昨天我做的一件事是我将所有python文件都添加到sys路

  • 问题内容: 我有一个带有php include的Div Tag,该div用来填充该信息,我想要做的是使它每隔15秒调用一次,以便它可以在那里更新信息,而不必重新加载整个网页。我试图用JavaScript / jQuery做到这一点,但似乎无法正常工作 这是我在搜索一些内容后所拥有的,然后发生的是,它加载了Small.php,但不会每15秒刷新一次或更新信息。 请帮忙! 我应该添加所有应显示的php

  • 问题内容: 我只是很好奇,因为我已经在FragmentActivity中设置了Fragment选项卡,如何从FragmentActivity或Fragment本身重新加载片段,以清除并重新加载该选项卡。我本质上需要重新选择选项卡以替换片段时发生的相同事情。有一种简单的方法可以执行此操作并重新加载片段吗? 问题答案: 创建一个方法,该方法开始FragmentTransaction,分离片段,然后提交

  • 当用户从用户界面更改配置时,我想动态地重新加载log4j附加器(RollingFileAppender)。 我已经通过编程删除了追加器,并用新的配置值创建了新的追加器。在此之后,appender broked MaxBackupIndex和MaxFileSize无法正常工作。但是如果我更改了文件名(日志文件名),那么它可以正常工作。 能帮我解决这个问题吗?