2016-04-29 27 views
5

के लिए सामग्री डिज़ाइन थीम बदलें मैं अपने कोणीय 2 एप्लिकेशन के साथ Angular Material 2 का उपयोग करने का प्रयास कर रहा हूं।कोणीय 2

मुझे नहीं मिला कि वैश्विक स्तर पर सामग्री विषय को कैसे बदला जाए (primaryColor, आदि)। मुझे पता है कि कोणीय सामग्री 2 अभी भी अल्फा में है, लेकिन क्या वर्तमान में ऐसा करने का एक तरीका है?

+0

क्या आपने कोणीय सामग्री 1 के लिए दस्तावेज़ पढ़े हैं? शायद यह समान है। यदि अभी तक 2 के लिए दस्तावेज़ नहीं हैं, तो इसे समझने के लिए स्रोत कोड को देखने का प्रयास करें। या अपने जीथब परियोजना पर एक मुद्दा उठाओ। –

उत्तर

3

https://github.com/angular/material2/issues/287

@ samio80 शैलियों वर्तमान में मन में थीम के साथ लिखा जाता है, लेकिन हम अभी तक तैयार प्रसंगयुक्तप्रस्तुतिकरण के लिए एक तैनाती रणनीति नहीं है। इस बीच एक कामकाज के रूप में, आप स्रोत को सीधे खींच सकते हैं और _default-theme.s.sss को संशोधित करके और एनपीएम पैकेज (स्क्रिप्ट चरण-release.sh के माध्यम से) को संशोधित करके थीम को कस्टमाइज़ कर सकते हैं।

ध्यान रखें कि हम अभी भी अल्फा प्रक्रिया में शुरुआती हैं और, जैसे, एपीआई या व्यवहार रिलीज़ के बीच बदल सकते हैं। यहाँ https://material.angular.io/guide/theming

और उस थीम दृष्टिकोण गाइड में बताई गई एक नमूना अनुप्रयोग है - -

+0

ठीक है, धन्यवाद :) क्या आपको बीटा की रिलीज तिथि के बारे में कोई जानकारी है? – quen2404

+0

नहीं है, Google किसी भी समय => –

+0

"इसके तैयार होते ही" @ GünterZöchbauer क्या im कर विषय से शैलियों कॉपी और घटक के स्टाइलशीट में जोड़ने से यह विषय का उपयोग करने के लिए सही तरीका है करने के लिए है प्रदान नहीं करता है? – blackHawk

1

डायनामिक कोणीय सामग्री विषय कार्यान्वयन का एक उदाहरण है कोणीय 5.1 और कोणीय सामग्री 5.0 के रूप में।

संपादन योग्य उदाहरण कार्य करना -, और फिर एक - https://stackblitz.com/edit/dynamic-material-theming

theme.scss फ़ाइल में सामान्य विषय (यह डिफ़ॉल्ट रूप में इसका इस्तेमाल करेंगे ताकि कोणीय है यह एक वर्ग के नाम के तहत रखा नहीं हो पा रहा है), हल्का और गहरा विषय।

theme.scss

@import '[email protected]/material/theming'; 
@include mat-core(); 

// Typography 
$custom-typography: mat-typography-config(
    $font-family: Raleway, 
    $headline: mat-typography-level(24px, 48px, 400), 
    $body-1: mat-typography-level(16px, 24px, 400) 
); 
@include angular-material-typography($custom-typography); 

// Default colors 
$my-app-primary: mat-palette($mat-teal, 700, 100, 800); 
$my-app-accent: mat-palette($mat-teal, 700, 100, 800); 

$my-app-theme: mat-light-theme($my-app-primary, $my-app-accent); 
@include angular-material-theme($my-app-theme); 

// Dark theme 
$dark-primary: mat-palette($mat-blue-grey); 
$dark-accent: mat-palette($mat-amber, A200, A100, A400); 
$dark-warn: mat-palette($mat-deep-orange); 

$dark-theme: mat-dark-theme($dark-primary, $dark-accent, $dark-warn); 

.dark-theme { 
    @include angular-material-theme($dark-theme); 
} 

// Light theme 
$light-primary: mat-palette($mat-grey, 200, 500, 300); 
$light-accent: mat-palette($mat-brown, 200); 
$light-warn: mat-palette($mat-deep-orange, 200); 

$light-theme: mat-light-theme($light-primary, $light-accent, $light-warn); 

.light-theme { 
    @include angular-material-theme($light-theme) 
} 

app.component फ़ाइल में, @ कोणीय/CDK/ओवरले से OverlayContainer शामिल हैं। आप यहां https://material.angular.io/guide/theming के लिए कोणीय के दस्तावेज़ ढूंढ सकते हैं; हालांकि उनका कार्यान्वयन थोड़ा अलग है। कृपया ध्यान दें, मुझे ऐप. मॉड्यूल में आयात के रूप में ओवरले मॉड्यूल भी शामिल करना था।

मेरी app.component फ़ाइल में, मैंने एक चर के रूप में @HostBinding('class') componentCssClass; भी घोषित किया, जिसका उपयोग थीम को कक्षा के रूप में सेट करने के लिए किया जाएगा।

app.component.ts

import {Component, HostBinding, OnInit} from '@angular/core'; 
import { HttpClient } from '@angular/common/http'; 
import { Version } from './classes/version'; 
import { OverlayContainer} from '@angular/cdk/overlay'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'], 
}) 
export class AppComponent implements OnInit { 

    constructor(private http: HttpClient, public overlayContainer: OverlayContainer) {} 

    title = 'app'; 
    version: Version; 
    @HostBinding('class') componentCssClass; 

    ngOnInit() { 
    this.getVersion(); 
    } 

    onSetTheme(theme) { 
    this.overlayContainer.getContainerElement().classList.add(theme); 
    this.componentCssClass = theme; 
    } 

    getVersion() { 
    this.http.get<Version>('/api/version') 
     .subscribe(data => { 
     this.version = data; 
     }); 
    } 

} 

app.module.ts

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 

import { HttpClientModule } from '@angular/common/http'; 

import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 
import { MatCardModule } from '@angular/material/card'; 
import { MatButtonModule } from '@angular/material/button'; 

import { AppComponent } from './app.component'; 

import { OverlayModule } from '@angular/cdk/overlay'; 

@NgModule({ 
    declarations: [ 
    AppComponent, 
    ], 
    imports: [ 
    BrowserModule, 
    HttpClientModule, 
    BrowserAnimationsModule, 
    MatCardModule, 
    MatButtonModule, 
    OverlayModule 
    ], 
    providers: [], 
    bootstrap: [AppComponent] 
}) 
export class AppModule {} 

अंत में, अपने दृश्य से onSetTheme फ़ंक्शन को कॉल करें।

app.component.html

<button mat-raised-button color="primary" (click)="onSetTheme('default-theme')">Default</button> 
<button mat-raised-button color="primary" (click)="onSetTheme('dark-theme')">Dark</button> 
<button mat-raised-button color="primary" (click)="onSetTheme('light-theme')">Light</button> 

आप एक नमूदार का उपयोग कर तो यह है कि कार्यक्षमता और अधिक गतिशील हो जाएगा सोच सकते हैं।

+0

इस सवाल का जवाब कर सकते हैं, [यह बेहतर होगा] (http://meta.stackoverflow.com/q/8259) जवाब का आवश्यक भागों में शामिल हैं, और संदर्भ के लिए लिंक प्रदान करेंगे। –

+0

क्षमा करें, मैंने पोस्ट में अधिक जानकारी प्रदान की है। –

+0

कृपया कई प्रश्नों के समान उत्तरों को पोस्ट न करें। एक अच्छा जवाब पोस्ट करें, फिर डुप्लिकेट के रूप में अन्य प्रश्नों को बंद करने के लिए वोट/ध्वज दें। यदि प्रश्न डुप्लिकेट नहीं है, * प्रश्न के उत्तर दें। * –