【发布时间】:2015-09-08 00:02:12
【问题描述】:
对不起,如果这是一个新问题。我正在尝试创建一个具有背景图像的登录页面,而我的其他页面没有。我使用了 ng-style 但我无法让属性在页面更改时更新。 在我的 index.html 中:
<body ng-app="myApp" ng-style="bodyStyle" ng-controller="bodyController">
//content
</body
车身控制器:
var image="http://momentumbooks.com.au/wp-content/uploads/2013/06/space.jpg";
if ($location.path() === '/login') {
$scope.bodyStyle = {background: "url(" + image + ") no-repeat center center fixed"};
} else{
$scope.bodyStyle={background: ""}
}
显然这不起作用,因为该函数只被调用一次。我尝试过使用 rootScope,但我似乎无法以 ng 样式使用 rootScope 属性(在我所看到的任何地方,人们都建议不要为此目的使用 rootScope)。如何创建动态背景?如果可能的话,我也不想在我的身体标签上使用控制器。
更新
我遇到的主要问题是更改路径时背景图像不会更新。图片是在bodycontroller中设置的,登录和更改路径时不会更改。
根据建议我可以编写一个服务,我以前使用过它们,但只通过 getter 和 setter,所以我假设我可以创建一个向控制器发送调用的服务?看起来像这样:
<body ng-app="myApp" ng-style="bodyStyle" ng-controller="bodyController">
//content
</body
身体控制器
var image=??;
$scope.bodyStyle = {background: "url(" + image + ") no-repeat center
一些服务
.service('backgroundService', function (image) {
var backgroundImage = image
// somhow set bodycontroller image?
});
然后在路由更改时以某种方式调用服务?我还没有找到一种方法将服务注入到我的路由器配置中,这是我认为我需要的。
【问题讨论】:
-
所以澄清一下,你想在 $location.path() 改变时改变背景吗?还是在特定时间之后?
-
当 location.path() 改变时。基本上我想要登录页面的背景,而不是其他任何地方。所以我认为最简单的方法是根据当前路径来做到这一点。但欢迎提出其他建议
-
您可以将背景设置为登录视图中的 div,而不是正文...但是如果您仍在尝试这种方式,您可以检查此指令 stackoverflow.com/a/15537359/1666722
-
我试过一个单独的 div。但是因为登录页面是ng-view,所以div在body里面,甚至在一个容器里面,所以我不能为整个页面设置背景。该链接存在我在任何地方都发现的相同问题。登录时ng-style没有改变,只在页面刷新时改变。
-
我建议您更改布局的结构,并将容器 div 放在 ng-view 中,这样您就可以添加全宽的内容...但是如果您不想这样做,请检查指令我把你贴在我的最后一条评论中(是 myz 的回答,34 分)