当前位置: 首页 > 知识库问答 >
问题:

如何订阅更改变量?

麹培
2023-03-14

请帮助我订阅更改的变量。我做了简单的微调。服务中的微调状态(真|假)存储:

import { Injectable } from '@angular/core';
import { Response, Headers, URLSearchParams } from '@angular/http';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class GlobalVarsService {
    private isVisibleSpinner: boolean = false;

  getSpinnerState(): Observable<boolean> {
    return this.isVisibleSpinner;
  }; 

  setSpinnerState(state): void {
    console.log('setSpinnerState', state);
    this.isVisibleSpinner = state;
  };    
}

在组件模板中,我通过条件显示微调器:

<div class="nav">
  <a [routerLink]="['/select']">select</a>
  <a [routerLink]="['/output']">output</a>
</div>

<router-outlet></router-outlet>

<div class="spinner-backdrop" *ngIf="isVisibleSpinner"></div>
<div class="spinner-area" *ngIf="isVisibleSpinner">
    <span class="spinner">loading...</span>
</div>

在组件中,我尝试订阅服务isVisibleSpinner变量中的更改:

import { Component } from '@angular/core';
import { Response } from '@angular/http';
import 'rxjs/add/operator/map'
import { GlobalVarsService } from './services/global-vars.service';

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

  constructor(private globalVarsService: GlobalVarsService) {  
        this.globalVarsService.getSpinnerState().subscribe(data => {
          console.log(data);
          this.isVisibleSpinner = data;
        });     
  }
}

但控制台输出遵循错误消息:

类型“boolean”不可分配给类型“Observable”。

共有1个答案

胡浩瀚
2023-03-14

因为您正在返回一个可观察值并将值放入boolean中,所以您可以将is变量的类型更改为observable,并使用异步管道来获取值,或者将您的“数据”映射到boolean,如果您需要的话

export class AppComponent {
    private isVisibleSpinner: Observable<boolean>;

  constructor(private globalVarsService: GlobalVarsService) {  
        this.globalVarsService.getSpinnerState().subscribe(data => {
          console.log(data);
          this.isVisibleSpinner = data;
        });     
  }
}

app.component.html

<div class="spinner-backdrop" *ngIf="isVisibleSpinner | async"></div>
<div class="spinner-area" *ngIf="isVisibleSpinner | async">
    <span class="spinner">loading...</span>
</div>
 类似资料:
  • 我尝试创建一个具有特定到期日期的订阅。 在下面的函数中,是一个数组,包含有关产品的详细信息。这个数组包含product_id、regular_price等。product_id引用订阅变量product。 是订阅开始日期。这个时间戳可能是几个月前的。 通过示例,我需要创建一个订阅开始2个月前(4月1日)。认购期限为3个月,因此认购期满必须为7月1日。 但现在的问题是,订阅到期时间定在9月27日。(

  • 我有一些“ChangeMainItem”操作(在我的例子中,它是由外部系统或可能的组件之一调度的)。此操作(例如)仅更新reducer中状态的一个属性(例如)。 我的组件A和B需要对此状态更改做出反应:显示加载指示器、获取其他数据并显示结果。顺序动作可以通过一些异步动作库来完成,但是我应该把调度异步动作放在哪里呢?显然,我不能在组件A和B的reducer中分派异步操作,我也不想将原始操作更改为异步

  • 我有一个带有iframe元素的组件。我将src属性设置为原始url,用户可以从那里导航。我想订阅用户导航到的新位置,假设它们在同一个域上。在非angular解决方案中,他们描述了在iframe上放置onload事件,但是在angular中在iframe上放置(load)事件似乎只在初始化时触发一次,而不是像我希望的那样,每次在iframe内有导航事件时都触发一次。我做了一个非常丑陋的解决方案: 但

  • 首先,感谢一个人帮我写了一个脚本,将订单状态更改为完成(脚本如下)。 不幸的是,它不会触发订阅进入活动状态。当我在WooCommerce中手动更改订单状态时,它会这样做。所以我的想法是根据给定的订单号激活订阅。 如何根据WooCommerce中的order_id将订阅状态从“待定”更改为“活跃”? 这里有一个代码,当我使用100%优惠券时,它会改变订单状态:在functions.php 我发现像这

  • mysql会员订阅数据表的设计应该如何设计?产品有订阅商品和非订阅的,每次都只能购买一个。 订阅有1个月 3个月的 每次到期自动扣费。如果在一个月类购买了几个订阅商品 则扣费按照最新的一个 然后延长到期时间。其实是不是每次订阅都不需要生成新订单的 翻阅了其他资料都找不到很好的设计

  • 我正在尝试升级贝宝订阅使用Rest API的计划。 https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_remission