不同页面背景的body标签上的Angular ng风格?

Posted

技术标签:

【中文标题】不同页面背景的body标签上的Angular ng风格?【英文标题】:Angular ng-style on body tag for different page backgrounds? 【发布时间】:2016-09-14 09:52:49 【问题描述】:

我是 Angular 和 ngroute 的新手,我正在尝试使用 ng-style 为网站的每个页面设置不同的图像背景。目前它设置所有网站页面的背景,即使我有不同的控制器范围图像 url。

我的html是这样的:

<body ng-controller="mainController" ng-style="bodyStyles">
...
   <div id="main">
      <div ng-view></div>
</body>

我的脚本: var angVenture = angular.module('angVenture', ['ngRoute']);

// configure routes
angVenture.config(function($routeProvider, $locationProvider) 
    $routeProvider

        // route for the index page
        .when('/home', 
            templateUrl : 'pages/home.html',
            controller  : 'mainController'
        )

        // route for the about page
        .when('/about', 
            templateUrl : 'pages/about.html',
            controller  : 'aboutController'
        )

 ... more routes.....      

// create the controller
angVenture.controller('mainController', function($scope) 
    // create a message to display in our view
    $scope.message = 'home page';
    $scope.bodyStyles =
        "background": "url(../images/someimage.jpg) no-repeat center center fixed", 
        "-webkit-background-size": "cover",
        "-moz-background-size": "cover",
        "-o-background-size": "cover",
        "background-size": "cover"
    
);

angVenture.controller('aboutController', function($scope) 
    $scope.message = 'another page.';
);

....more controllers for different pages...

用 ui-router 做这个会更好吗?

【问题讨论】:

【参考方案1】:

更好的策略是不在javascript 中执行此操作,而是将所有样式移至您的css。您可以通过使用 $scope 变量添加类并在 css 中定义这些类来实现:

控制器

angVenture.controller('mainController', function($scope) 
  // create a message to display in our view
  $scope.message = 'home page';
  $scope.bodyClass = 'main-view';
);

查看

<body ng-controller="mainController" ng-class="bodyClass">

CSS

.main-view 
  "background": "url(../images/someimage.jpg) no-repeat center center fixed", 
  "-webkit-background-size": "cover",
  "-moz-background-size": "cover",
  "-o-background-size": "cover",
  "background-size": "cover"

【讨论】:

【参考方案2】:

试试这个

angVenture.controller('mainController', function($scope, $location) 
      // create a message to display in our view
        var classObject = "/home":"../images/someimage1.jpg", "/about": "../images/someimage1.jpg" ;
        $scope.message = 'home page';
        $scope.imageName = classObject[$location.path()];
    );

CSS

.main-view 

  "-webkit-background-size": "cover",
  "-moz-background-size": "cover",
  "-o-background-size": "cover",
  "background-size": "cover"

HTML

<body ng-controller="mainController" class="main-view" styel=""background": "url(imageName) no-repeat center center fixed"">

【讨论】:

以上是关于不同页面背景的body标签上的Angular ng风格?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery/CSS - 基于值的不同 <body> 背景图像,无需在 _Layout 页面上的 document.ready() 中加载

Angular js 简介

“*ngFor”背景颜色变化中的Angular 2“ng-style”

当 ng 服务 Angular 应用程序时,不考虑在组件 css 中配置的背景图像的相对路径

没有图像的元素上的CSS掩码?

html 标签