Css 不同UI路由器状态的不同正文背景
在一个简化的场景中,我有两个UI路由器状态,希望它们有不同的主体背景颜色 因此,理想情况下,我想做以下工作:Css 不同UI路由器状态的不同正文背景,css,angularjs,angular-ui-router,Css,Angularjs,Angular Ui Router,在一个简化的场景中,我有两个UI路由器状态,希望它们有不同的主体背景颜色 因此,理想情况下,我想做以下工作: <body ng-class="background" ui-view> </body> 但是将ui视图属性放在主体上会删除它。因此,我必须将ui视图属性放在主体内部的一个div上 <body> <div ui-view></div> </body> 现在如何控制身体背景? 我知道各种各样的黑客行为(
<body ng-class="background" ui-view>
</body>
但是将ui视图
属性放在主体上会删除它。因此,我必须将ui视图
属性放在主体内部的一个div上
<body>
<div ui-view></div>
</body>
现在如何控制身体背景?
我知道各种各样的黑客行为(例如,在UI路由器的oneter
函数中访问body的class-DOM属性,…),但是有什么好方法可以做到这一点吗
或者,这一切都是为了使
div[ui view]
达到全高(即),并在该元素上设置背景,以模仿应用背景的方式?可能不准确,但您可以直接在控制器中更改身体背景色吗
stateHelperProvider
.state({
name: 'a',
url: '/a',
templateUrl: 'views/a.html',
controller: function ($scope) {
document.body.style.background = 'bg1';
}
})
.state({
name: 'b',
url: '/b',
templateUrl: 'views/b.html',
controller: function ($scope) {
document.body.style.background = 'bg2';
}
});
或者在这种情况下,只需在主体中添加/删除CSS类
“祝你好运”所以总结一下我的经验,有两种方法可以做到这一点。两者都要求
$state
服务位于$rootScope
中。这很优雅,但我会选择这个解决方案
.state({
...,
data: {
bodyClass: 'bg1'
}
});
.state({
...,
resolve: {
bodyClass: function($stateParams) {
// do some calculation
return ...
}
}
});
然后,在主体上放置一个ng类并引用当前状态的数据:
<body ng-class="$state.current.data.bodyClass">
然后,在主体上放置一个ng类
,并通过以下方式引用解析的类名:
在这两种情况下,bodyClass都可以对有效的。进行任何操作,并且可以使用类。问题是,如果我的状态
c
没有背景,那么前一个状态的背景将保持不变。当然,我可以在示波器上收听$destroy
,但这也不是很优雅。如果主体上有一个带有“ngStyle”的控制器,它可以获取页面值并根据页面名称的条件更改背景,那该怎么办?可能不是很准确,但希望它能有所帮助。我可能可以将后台类作为一个类,然后使用$rootScope
上的$state
执行以下操作:
。不完全是你提出的,但受到了启发。我曾想过类似的事情,但更好。:)我刚刚意识到,我实际上需要动态计算每个状态的后台CSS类,这意味着它需要位于控制器或解析中。作为详细信息,有一种从$state
访问已解析属性的方法。所以这可能是正确的选择。顺便说一句。更新页面标题对我有用吗!——只是想指出,为了让它工作,您必须运行$rootScope.$state=$state声明模块时,从内部运行。答案的第一句中提到了这一点,并用粗体表示,但没有给出示例。您可以通过以下链接找到示例代码,该链接也在答案中提供
.state({
...,
resolve: {
bodyClass: function($stateParams) {
// do some calculation
return ...
}
}
});
<body ng-class="$state.$current.locals.globals.bodyClass">