Javascript 运行时角度UI路由器替换视图

Javascript 运行时角度UI路由器替换视图,javascript,angularjs,angular-ui,angular-ui-router,Javascript,Angularjs,Angular Ui,Angular Ui Router,我试图在运行时更改父视图模板-在服务内部 我的应用程序配置如下所示: $stateProvider .state('base', { abstract: true, views: { 'header': { controller: 'HeaderCtrl', templateUrl: 'header.html' }, '': { template:

我试图在运行时更改父视图模板-在服务内部

我的应用程序配置如下所示:

$stateProvider
.state('base', {
    abstract: true,
    views: {
        'header':       {
            controller: 'HeaderCtrl',
            templateUrl: 'header.html'
        },
        '': {
            template: '<div ui-view="main"></div>'
        }
    }
})
.state('base.home', {
    url: '/',
    views: {
        'main': {
            controller: 'SomeContentCtrl',
            templateUrl: 'content.html'
        }
    }
});
但这根本不起作用。以前有没有人遇到过类似的用例


谢谢

您可以指定一个templateURL函数,该函数在每次导航到该状态时运行

此方法可以检查是否应该提供url或其他内容; 例如:


如果要在不删除html的情况下“隐藏”标题部分,请尝试在标题标记内使用ng show指令,并检查实际状态

<div ng-show="state.is('base')">

这样,您只需要在控制器中注入$state服务。 当状态为base时,div将显示,如果导航到子状态,它将隐藏


p、 s.$state.is返回一个布尔值,此方法也适用于ng if。

谢谢您的回答。我认为这不符合上面提供的要求,因为它不允许在加载模板后更改模板。我说的对吗?这将适用于每个导航。如果您想在常规运行时删除模板,您可以随时清空DOM元素。这不是目标,可以在状态配置上实现,从我的角度来看,这是一种更干净的方法。我很感兴趣。如何从状态配置中实现它?可以通过nameOfView@nameOfState'然后将模板设置为所需的任何值。但这与我的问题无关。我希望以干净的角度方式动态删除视图。您还可以使用oneter、onExit回调。无论如何,这并不能回答我的问题。谢谢
$stateProvider.state('home', {
        url: '/',
        templateUrl: function () {
            if (header === true) {
                return 'app/templates/home.html';
            } else {
                return somethingElse;
            }
        }
    })
<div ng-show="state.is('base')">