1

angular と ngroute は初めてで、ng-style を使用して、Web サイトのページごとに異なる画像の背景を使用しようとしています。現在、コントローラースコープの画像 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 でこれを行う方がよいでしょうか?

4

2 に答える 2

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"
}
于 2016-05-18T05:05:45.573 に答える