变量变化检测 - Angular

2024-02-14

我对 Angular 相当陌生,主要使用 VueJS。我想知道如何检测变量何时更新。我正在通过 DataService 更新我的变量。我读到ngOnChanges()但我发现这只适用于输入。

这几乎是我的代码:

import { DataService } from "../../service/my.service";

export class MainPage {
  myVar: String = ""; // this is the variable I want to listen when a change is made

   constructor (
    private data: DataService
   ) {}

   ngOnInit() {
    this.data.changeVar.subscribe(message => this.myVar = message);
  }
}

我的服务

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

@Injectable()
export class DataService {

  private messageSource = new BehaviorSubject<string>("");
  changeVar = this.messageSource.asObservable();

  constructor() { }

  changeMyVar (message: string) {
    this.messageSource.next(message)
  }

}

这是我更新变量的地方。

import { DataService } from "../../service/my.service";

export class AnotherPage {
  anotherVar: String = '';

  constructor(
    private data: DataService
  ) { }

  ngOnInit() {
    this.data.changeVar.subscribe(message => this.anotherVar = message)
  }

  myFunction () {
    this.data.changeMyVar("Hello"); // update variable to "Hello"
  }
}

任何帮助是极大的赞赏! :)


If myVar仅在定义的 Observable 回调中更改ngOnInit,您可以在更改变量后调用方法:

export class MainPage {

    myVar: string = "";

    ngOnInit() {
        this.data.changeVar.subscribe(message => {
            if (message !== this.myVar) {
                this.myVar = message;
                this.doSomething();
            }
        });
    }

    private doSomething() {
        ...
    }
}

另一方面,如果myVar可以在其他地方更改(因为它是公共的),您可以在 getter/setter 中访问它,并调用 setter 中的方法:

export class MainPage {

    private _myVar: string = "";

    get myVar(): string {
        return this._myVar;
    }
    set myVar(value: string) {
        if (value !== this._myVar) {
            this._myVar = value;
            this.doSomething();
        }
    }

    ngOnInit() {
        this.data.changeVar.subscribe(message => this.myVar = message);
    }

    private doSomething() {
        ...
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

变量变化检测 - Angular 的相关文章

随机推荐

  • 当使用 OpenCV 完成图像加载和调整大小时,Resnet50 会产生不同的预测

    我想使用 Keras Resnet50 模型和 OpenCV 来读取输入图像并调整其大小 我使用 Keras 中的相同预处理代码 对于 OpenCV 我需要转换为 RGB 因为这是 preprocess input 期望的格式 我使用 Op
  • FFmpeg透明PNG黑色轮廓问题

    我正在使用 ffmpeg 对透明 PNG 视频进行编码 我注意到图像周围有一个轻微的黑色轮廓 有什么办法可以去除吗 Output image Transparent PNG sample 我的 ffmpeg 命令 ffmpeg hide b
  • 运行docker容器时出现java not found错误

    我有简单的 Dockerfile 如下 FROM centos centos7 FROM adoptopenjdk openjdk8 jre8u352 b05 ea ubuntu nightly EXPOSE 8080 WORKDIR ho
  • 可变高度滚动 div,相对于可变高度同级定位

    最近我问了这个问题 溢出 滚动 100 容器高度 https stackoverflow com questions 4910883 overflow scroll 100 container height关于如何实现高度可变的垂直滚动di
  • C#:OperationCanceledException:操作已取消

    下面我尝试将数据发送到 eventhub 它会工作几分钟 然后操作取消异常被抛出 关于我在使用 CancellationToken 时出错的地方有任何提示吗 如果那是我应该使用的 或者我该如何解决这个问题 public async void
  • OpenID Connect 是否支持资源所有者密码凭证授予?

    我之前一直使用 OAuth 资源所有者凭据流进行授权 不过 我现在想考虑按照此速度使用 openid connect 进行身份验证和授权 并且想知道 openid connect 是否支持资源所有者凭据流 是的 OpenID Connect
  • Swift stringByEvaluatingJavaScriptFromString

    我尝试在我的 WebView 上使用一些 javascript 和新的 stringByEvaluatingJavaScriptFromString功能 我不太熟悉语法 所以我尝试了 func stringByEvaluatingJavaS
  • 如何在 mongoid 中强制执行唯一的嵌入文档

    我有以下型号 class Person include Mongoid Document embeds many tasks end class Task include Mongoid Document embedded in commi
  • 是否可以将 DDL 更改包装在 PostgreSQL 的事务中?

    我知道在 MySQL ddl 语句中 例如 alter table create table etc 会导致隐式事务提交 当我们转向 PostgreSQL 时 是否可以在一个事务中包装多个 DDL 语句 这将使迁移脚本更加健壮 失败的 DD
  • 用于动态电子邮件的 Angular $compile 模板

    我正在尝试加载一个带有 ng repeats 的 html 模板 然后使用 compile服务对其进行编译并在电子邮件中使用编译后的 html 问题 好吧 在提问之前让我先设置术语 绑定占位符 customer name 绑定值 john
  • 在discord.js中获取用户横幅

    有没有办法使用discord js 获取discord 上的用户横幅 用户横幅是新功能 所以我不确定到目前为止是否有任何方法 我在文档中没有找到任何内容 例如 服务器横幅可用于 https cdn discordapp com banner
  • 如何在perl中不使用key来查找值是否存在于hash中?

    我有一个像这样的哈希图 my name AUS dynamic values my hash a gt x gt 1 gt US 2 gt UK y gt 1 gt AFRICA 2 gt AUS b gt
  • 包含引用类型的结构

    结构是一种值类型 因此如果我将一个结构分配给另一个结构 其字段将被复制到第二个结构中 但是 如果结构体的某些字段是引用类型 会发生什么情况 public struct MyIPEndPoint public String IP public
  • CommonJS 'require' 是否仍在使用或已弃用?

    目前Javascript采用importES6 作为导入模块的标准方式 但是 我有时会看到使用 CommonJS 的代码require代替import 我首先想知道两个是否可以一起使用 但似乎两个不能互换 相关堆栈溢出问题 https st
  • 不存在足够的页面大小 - DB2 插入

    我有一个 DB2 查询 简单插入语句 它试图插入一些 27 列 在这些列中 第 1 列是Clob问题就在那里 为了我的Clob列 有时该值甚至可能包含28K人物 在这种极端的情况下 我收到以下错误 A system temporary ta
  • 如何在运行 Windows 的 Elastic Beanstalk 环境中启用 CloudWatch Logs?

    我有一个网络服务 可以将数据输出到平面文件中 在非 EC2 原始 Windows 实例中 我们使用 EC2Config 服务将日志文件和一些性能计数器传送到 CloudWatch 请参阅此处 http blogs aws amazon co
  • Qt/QML Android 发送自定义 Intent 的最佳实践(共享 URL)

    我想知道是否有任何从 QML 或 c 发送自定义 android 意图的最佳实践技巧 我应该创建一个自定义 android 活动并使用 QAndroidJniObject 类来调用它还是有更好的方法 我的目的是创建一个从 QML 到其他 A
  • Fragment中拦截ActionBar Home按钮

    我可以成功拦截ActionBar我的主页按钮NavigationDrawerFragment 它被添加到我的MainActivity 像这样 Override public boolean onOptionsItemSelected Men
  • PHP 无需等待 sem_acquire?

    不是特定的代码问题 而是一般的代码问题 我试图在工作项目中使用信号量来限制可以同时访问某些进程的用户数量 据我了解如下 iKey ftock sSomeFileLocation sOneCharacterString Generate th
  • 变量变化检测 - Angular

    我对 Angular 相当陌生 主要使用 VueJS 我想知道如何检测变量何时更新 我正在通过 DataService 更新我的变量 我读到ngOnChanges 但我发现这只适用于输入 这几乎是我的代码 import DataServic