Changer la couleur de l'en-tête ion-view dans ionic

J'utilise le modèle de barre de menu ionique starter. Je voudrais changer la couleur d'arrière-plan de l'en-tête de chaque page. J'ai actuellement:

<ion-view view-title="Search">
  <ion-content>
    <h1>Search</h1>
  </ion-content>
</ion-view>

J'ai essayé:

<ion-view view-title="Search" class="bar bar-header bar-assertive">
  <ion-content>
    <h1>Search</h1>
  </ion-content>
</ion-view>

Mais cela ne fonctionne pas du tout (le contenu n'est pas rendu). La documentation d'en-tête ne m'aide pas. Quelle est la bonne façon de le faire?

23
demandé sur poiuytrez 2015-05-03 18:10:40

11 réponses

Quelques façons de le faire:

  1. Vous pouvez ajouter la barre ion-nav à chaque vue.

    <ion-view view-title="Page 1">
      <ion-nav-bar class="bar-balanced">
        <ion-nav-back-button></ion-nav-back-button>
      </ion-nav-bar>
      <ion-content>
        ...
      </ion-content>
    </ion-view>
    

    Exemple Codepen

  2. Vous pouvez également mettre à jour la couleur d'arrière-plan (et toutes les autres propriétés) en utilisant ng-style

    Barre de navigation principale:

     <ion-nav-bar class="bar-positive" ng-style="{'background-color': viewColor}">
        <ion-nav-back-button></ion-nav-back-button>
      </ion-nav-bar>
    

    CSS:

    .nav-bar-block, .bar {
      background-color: inherit !important;
    }
    

    Contrôleur:

    $scope.$on('$ionicView.beforeEnter', function() {
        $rootScope.viewColor = 'green';
    }); 
    

    Exemple Codepen

56
répondu brandyshea 2015-05-11 18:16:08

N'a pas pu trouver de solution propre pour cela, mais un hack pourrait être d'utiliser l'événement $stateChangeStart et de définir le nom de la classe manuellement.

angular.module('starter')
.run(function ($rootScope) {
    var element;
    $rootScope.$on('$stateChangeStart', function (event, next) {
        if (next.name) {
            element = angular.element(document.querySelectorAll('ion-header-bar'));
            switch(next.name) {
                case 'tab.chats':
                    element.removeClass('bar-positive');
                    element.removeClass('bar-balanced');
                    element.addClass('bar-calm');
                    break;
                case 'tab.dash':
                    element.removeClass('bar-calm');
                    element.removeClass('bar-balanced');
                    element.addClass('bar-positive');
                    break;
                default :
                    element.removeClass('bar-calm');
                    element.removeClass('bar-positive');
                    element.addClass('bar-balanced');
            }
        }
    });
});

Violon

Modifier L'idée est la même pour le modèle de barre latérale,

Mis à Jour le violon

Notez la ligne

<ion-nav-bar class="bar-positive">

Dans le menu.modèle html, il désigne la classe de couleur d'en-tête de base. mais les modifications ultérieures aux pages, c'est-à-dire la couleur d'en-tête des États, doivent être modifiées manuellement dans $stateChangeStart événement,

Code:

.run(function ($rootScope) {
    var element;
    $rootScope.$on('$stateChangeStart', function (event, next) {
        if (next.name) {
            element = angular.element(document.querySelectorAll('ion-side-menu-content ion-header-bar'));
            console.log(element);
            switch(next.name) {
                case 'app.search':
                    element.removeClass('bar-positive');
                    element.removeClass('bar-energized');
                    element.removeClass('bar-dark');
                    element.addClass('bar-assertive');
                    break;
                case 'app.browse':
                    element.removeClass('bar-calm');
                    element.removeClass('bar-assertive');
                    element.removeClass('bar-dark');
                    element.addClass('bar-energized');
                    break;
                default :
                    element.removeClass('bar-positive');
                    element.removeClass('bar-energized');
                    element.removeClass('bar-assertive');
                    element.addClass('bar-dark');
            }
        }
    });
});
  1. ici, le nom de l'état est vérifié pour voir quelle page active ex. app.search
  2. ensuite, selon la classe de couleur spécifique de l'exigence est assignée en supprimant d'autres classes de couleur.

Options de couleur ionique

J'espère que cela aide.

3
répondu shakib 2015-05-11 14:24:01

Si vous utilisez des états différents et que chaque État a un contrôleur différent, il suffit d'avoir une variable $ scope comme $scope.stateone = "true" etc. Ensuite, sur votre barre d'ion-nav, utilisez ng-class="{'bar-positive': stateone, 'bar-stable': statetwo, 'bar-assertive': statethree}". ng-class prend des classes et une expression, quelle que soit l'expression true qui est la classe assignée. vous pouvez utiliser ng-class avec n'importe quelle expression booléenne. c'est comment vous pouvez avoir une couleur différente sur chaque page.

1
répondu Jess Patton 2015-05-12 16:47:32

J'ai modifié la solution de @shakib pour répondre à mes besoins, dans mon cas l'utilisateur définit le thème en cliquant sur le logo de l'application et donc la couleur de la barre devrait changer. Si c'est votre cas, vous n'avez pas besoin de faire le switch case parce que vous voulez changer toutes les vues

$rootScope.$on("$stateChangeStart", function (event, toState) {
          var element;
          if (toState.name){
              element = angular.element(document.querySelectorAll('ion-side-menu-content ion-header-bar'));
              if (debugMode) console.log(element);
              // I get the bar-class from my localStorage where I keep the user settings
              var saved_bar_class = $localStorage.get('bar-class','bar-calm');

              element.removeClass('bar-pink');
              element.removeClass('bar-calm');
              element.addClass(saved_bar_class);
          //    Here We could use a Switch Case on toState.name to put a different color to each state

          }
      });

Aussi, lorsque l'utilisateur clique sur le logo de l'application, je veux changer immédiatement la couleur de la barre afin de donner des commentaires à l'utilisateur de ce que ce bouton fait. Le code ci-dessus ne le fera pas parce que nous n'avons pas encore changé d'État, pour résoudre ce problème, ajoutez simplement ce code à votre fonction 'changer de thème'

$scope.changeAppTheme = function () {
        var element;
        element = angular.element(document.querySelectorAll('ion-side-menu-content ion-header-bar'));
            // some code to select the theme
            element.removeClass('bar-pink');
            element.removeClass('bar-calm');
            element.addClass('bar-pink');
            // some other code
    };

Dans ce cas, j'ai juste deux couleurs, le calme ionique et un rose que j'ai défini J'espère que cela aide quelqu'un

1
répondu Tenoch G 2015-07-14 17:13:30

Nous l'avons fait fonctionner en CSS avec:

.title.title-center.header-item {
    background-color: black;
    margin: 0px;
}

Cela signifie que nous nous référons simplement aux classes D'en-tête générées angulaires directement avec ce CSS. Espérons que cette aide!

1
répondu hooligan 2015-12-29 12:46:15

Essayez d'utiliser le code suivant:

<ion-view>
  <ion-header-bar class="bar-assertive">
    <h1 class="title">Search</h1>
  </ion-header-bar>
  <ion-content>
    <h1>Search</h1>
  </ion-content>
</ion-view>
0
répondu QueryLars 2015-05-04 14:22:09

Vous pouvez remplacer $bar-stable-text color (extrait de _variables.scss de ionic lib)

Par exemple, dans votre scss changer

$bar-stable-text: green !default;
0
répondu nium 2015-06-27 18:27:21

Si vous souhaitez modifier le ion-nav-bar cela fonctionne ici comme un charme:

1 . Créez un contrôleur principal pour prendre soin de votre page d'index et de toutes les vues qui s'y trouvent. 2. Ajoutez cette fonction au contrôleur:

$scope.setNavColor = function(color){
    for(var i =0; i <  document.getElementsByTagName("ion-header-bar").length; i++){
      classNames = document.getElementsByTagName("ion-header-bar")[i].className;
      classNames = classNames.replace(/(bar-light|bar-stable|bar-positive|bar-calm|bar-balanced|bar-energized|bar-assertive|bar-royal|bar-dark)/g, color );
      document.getElementsByTagName("ion-header-bar")[i].className = classNames;
    }
  }

3 . add on-select à votre onglet ion-tab afin qu'il appelle la fonction chaque fois que votre onglet est choisi: <ion-tab href="#addr" on-select="setNavColor('PUT_YOUR_COLOR_HERE')> </ion-tab>

4 . add on-désélectionnez-vous aussi ion-tab Si vous voulez que la couleur revienne à une certaine valeur lorsque vous partez.

5 . Amuse-toi bien!

0
répondu Marcelo Lazaroni 2015-09-11 09:21:55
//add these lines in your style.css file under /www/css/ yoyr project    directory
 .title.title-center.header-item {
    background-color:#30393A;//#F38023!important; // for bg color
    margin:0px!important;
    margin-left:0px!important;
    color: #ffffff!important;
    text-align: center !important;
    width: 100%;
 }
0
répondu 2016-02-22 05:03:55

Mettez ces lignes dans votre style.css sous /www/css/ répertoire de votre ionique projet

.title.title-center.header-item {
    background-color:#4a87ee;//#F38023!important; // for bg color
    margin:0px!important;
    margin-left:0px!important;
    color: #ffffff!important;
    text-align: center !important;
    width: 100%;
}
0
répondu d-_-b 2016-04-03 03:14:34

Si vous utilisez scss dans votre application, vous pouvez créer votre propre classe de barre personnalisée et Y utiliser les mixins de barre d'ionic.

$bar-custom-bg: #ccc;
$bar-custom-border: #eee;
$bar-custom-text: #fff;
$bar-custom-active-border: darken($bar-custom-border, 10%);
$bar-custom-active-bg: darken($bar-custom-bg, 10%);

.bar {
    &.bar-custom {
        @include bar-style($bar-custom-bg, $bar-custom-border, $bar-custom-text);
        &.bar-footer{
            background-image: linear-gradient(180deg, $bar-custom-border, $bar-custom-border 50%, transparent 50%);
        }

        .button {
            @include button-style($bar-custom-bg, $bar-custom-border, $bar-custom-active-bg, $bar-custom-active-border, $bar-custom-text);
            @include button-clear(#fff, $bar-title-font-size);
        }
    }
}

Après avoir défini votre classe, vous pouvez utiliser votre nouvelle classe de barre personnalisée avec la directive ion-nav-bar.

<ion-nav-bar class="bar-custom">
    <ion-nav-back-button></ion-nav-back-button>
</ion-nav-bar>
0
répondu Önder Ceylan 2016-06-27 13:11:10