J'utilise le modèle de barre de menu du démarreur ionique. Je voudrais changer la couleur de fond d'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 header ne m'aide pas. Quelle est la bonne façon de faire cela?
Quelques manières de faire ceci:
Vous pouvez ajouter la barre de navigation ionique à 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>
Vous pouvez également mettre à jour la couleur de fond (et toutes 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;
}
Manette:
$scope.$on('$ionicView.beforeEnter', function() {
$rootScope.viewColor = 'green';
});
Impossible de trouver une solution propre à cela, mais un hack pourrait consister à utiliser l'événement $stateChangeStart
et à définir manuellement le nom de la classe.
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');
}
}
});
});
EDIT L’idée est la même pour le modèle de barre latérale,
Remarquez la ligne
<ion-nav-bar class="bar-positive">
dans le modèle menu.html, il désigne la classe de couleur d'en-tête de base . mais les modifications ultérieures apportées aux pages i.e indiquent la couleur d'en-tête doit être modifiée manuellement dans l'événement $stateChangeStart
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');
}
}
});
});
app.search
j'espère que cela t'aides.
Nous l'avons obtenu 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 par Angular directement avec ce CSS. J'espère que cela t'aides!
J'ai modifié la solution de @shakib pour l'adapter à mes besoins. Dans mon cas, l'utilisateur définit le thème en cliquant sur le logo de l'application. La couleur de la barre doit donc changer. Si tel est votre cas, vous n'avez pas besoin de faire le switch case
car vous souhaitez modifier 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
}
});
De plus, lorsque l'utilisateur clique sur le logo de l'application, je souhaite modifier immédiatement la couleur de la barre afin de pouvoir informer l'utilisateur de la fonction de ce bouton. Le code ci-dessus ne le fera pas car nous n'avons pas encore changé d'état. Pour résoudre ce problème, ajoutez ce code à votre fonction 'changer le 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, je n'ai que deux couleurs, le calme ionique et le rose que j'ai défini J'espère que cela aidera quelqu'un
si vous utilisez des états différents et que chaque état a un contrôleur différent de celui ayant simplement une variable $ scope telle que $scope.stateone = "true"
etc. Utilisez ensuite ng-class="{'bar-positive': stateone, 'bar-stable': statetwo, 'bar-assertive': statethree}"
sur votre ion-nav-bar ng-class prend des classes et une expression, quelle que soit l'expression qui correspond à la classe affectée. vous pouvez utiliser ng-class avec n'importe quelle expression booléenne. Voici comment vous pouvez avoir une couleur différente sur chaque page.
//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%;
}
Si vous voulez changer le ion-nav-bar
cela fonctionne ici comme un charme:
1 . Créez un contrôleur principal pour prendre en charge votre page d’index et toutes les vues qu’elle contient . 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 ajoutez on-select à votre onglet ion-tab
pour 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 ajoutez on-désélectionnez vous aussi ion-tab
si vous voulez que la couleur reprenne une valeur lorsque vous partez.
5 S'amuser!
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>
Vous pouvez remplacer $bar-stable-text color
(tiré de _variables.scss
à partir de ionic lib
)
Par exemple, dans votre changement scss
$bar-stable-text: green !default;
placez ces lignes dans votre style.css dans le répertoire /www/css/
de votre projet ionique
.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%;
}
Si vous utilisez scss dans votre application, vous pouvez créer votre propre classe de barres et y utiliser les barres de mixage 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 barres 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>