【问题标题】:Pass parameter from page to app.component from dark mode从暗模式将参数从页面传递到 app.component
【发布时间】:2020-09-16 17:21:49
【问题描述】:

您好,我使用这个 git 为我的项目启用暗模式。 https://github.com/ionic-team/ionic-conference-app

它可以工作,但我想将切换按钮放在页面中而不是 app.component.html

深色主题就是这样工作的。

  1. app.component.html 中的切换按钮

       <ion-app [class.dark-theme]="dark">
         <ion-split-pane contentId="main-content">
           <ion-item>
            <ion-icon slot="start" name="moon-outline"></ion-icon>
            <ion-label>
              Dark Mode
            </ion-label>
           <ion-toggle [(ngModel)]="dark"></ion-toggle>
           </ion-item>
         </ion-split-pane>
       </ion-app>
    
  2. 将dark参数设置为false,以便在切换时改变

         export class AppComponent implements OnInit {
         dark = false;
    
          constructor(
    

所以这行得通。如果它有效,但仅在页面中,而不是整个项目在黑暗中只有我设置切换的页面。所以我认为我必须将参数传递给 app.component.ts?

我添加了一个新服务 Global Service

global.service.ts

   import {BehaviorSubject} from "rxjs";

    export class GlobalService {
       public darkModeToggleState = new BehaviorSubject(false);
       constructor(){}
     }

app.component.ts

      import { GlobalService } from './services/global.service/global.service';

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

      dark;

app.component.html 将类更改为深色

      <ion-app [class.dark-theme]="dark">
        <ion-router-outlet></ion-router-outlet>
       </ion-app>

somepage.html

      <ion-toggle *ngIf="index === 5" [(ngModel)]="dark" (ionChange)="darkToggled($event)"></ion-toggle>
  

somepage.ts

       import { GlobalService } from '../../services/global.service/global.service';
        
     constructor(){}

      darkToggled(event){
        this.globalSrvc.darkModeToggleState.next(event.target.chacked)
      }

【问题讨论】:

    标签: angular ionic-framework


    【解决方案1】:

    您可以设置 BehaviourSubject 来跟踪此切换。这样做。

    在你的组件 html 文件中

    <ion-toggle [(ngModel)]="dark" (ionChange)="darkToggled($event)"></ion-toggle>
    

    在您的组件 .ts 文件中

    constructot(private globalSrvc:GlobalService){}
    darkToggled(event){
       this.globalSrvc.darkModeToggleState.next(event.target.checked)
    }
    

    新的服务文件,global.service.ts

    export class GlobalService {
         public darkModeToggleState = new BehaviorSubject(false);
         constructor(){}
    }
    

    在您的 app.component.ts 中

    dark;
    constructor(private globalSrvc:GlobalService){
       this.globalSrvc.darkModeToggleState.subscribe(value=>{
           this.dark = value
       }
    }
    

    有了这个,你可以在任何地方为多个组件添加暗模式切换。

    【讨论】:

    • 我已经更新了,所以我可以展示我做了什么。没有错误,但是当更改切换时没有任何反应
    • 在 app.component.ts 中设置断点,查看切换时this.dark 的值是否更新
    • 你的意思是这样 this.globalSrvc.darkModeToggleState.subscribe(value=>{ this.dark = value; console.log(value); });返回 false 并且当切换返回未定义时
    • 感谢老兄,它现在可以工作了。为了将来提及Chetan的答案有效!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多