【问题标题】:Angular ui.router reload parent templateProviderAngular ui.router 重新加载父 templateProvider
【发布时间】:2015-04-22 00:40:38
【问题描述】:

我有一个基于用户类型加载导航的抽象基础模板。这部分适用于初始加载。问题是当用户之后登录或注销时,我无法让父 templateProvider 重新加载。我已尝试解决方案here 重新加载父模板,但导航模板不受影响。有没有办法重新加载 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 issue 尝试的控制器函数:

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

【问题讨论】:

    标签: angularjs angular-ui-router


    【解决方案1】:

    我创建了working example here。它来自这个Q & A

    这将是调整后的状态定义:

    .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>
    

    检查action here中的所有内容

    【讨论】:

      猜你喜欢
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 2023-03-19
      • 2017-10-14
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多