尽管主题接下来调用,但指令订阅不会触发

2024-01-09

Plunkr: https://plnkr.co/edit/KfPfVSbZm087uIPvFEkM?p=preview https://plnkr.co/edit/KfPfVSbZm087uIPvFEkM?p=preview

我有一个充当模式组件 api 的服务,然后我有一个指令,可用于在模式打开时向任何元素添加类。但是,无论我做什么,指令内的订阅都不会触发。

我尝试过同时使用Subject and BehaviorSubject但没有一个有效。

Service:

@Injectable()

export class ModalApiService {

  constructor() {}

  private states = new Subject<any>();

  states$ = this.states.asObservable();

  open(id: string, template?: string): void {
    this.states.next({isOpen: true, id: id, template: template});

    // This runs as expected
    console.log(true);
  }

  close(id: string): void {
    this.states.next({isOpen: false, id: id});
  }
}

指示:

@Directive({
  selector: '[modalState]'
})

export class ModalStateDirective implements OnDestroy, OnInit {

  constructor(private modalApi: ModalApiService) {}

  private modalSubscription: Subscription;

  @HostBinding('class.modal-open')
  isOpen: boolean;

  ngOnInit() {

    this.modalSubscription = this.modalApi.states$.subscribe(
      state => {
        this.isOpen = state.isOpen;

        console.log(this.isOpen)
      }
    );
  }

  ngOnDestroy() {
    this.modalSubscription.unsubscribe();
  }
}

如果你使用BehaviourSubject,它有效并且会击中subscribe function。但仍然无法确定为什么我们有undefined value of object properties当我能够正确记录对象时。

import 'rxjs/Rx';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';

private states = new BehaviorSubject<any>();
states$ = this.states.asObservable();

工作但不工作:https://plnkr.co/edit/YspSd2fKvktPEk6bL2hF?p=preview https://plnkr.co/edit/YspSd2fKvktPEk6bL2hF?p=preview

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

尽管主题接下来调用,但指令订阅不会触发 的相关文章

  • 单击上一页的按钮路由到该页面后如何刷新页面

    我有 2 个页面 一个主页和一个页面 2 当我单击主页上的按钮时 它会路由到 page2 现在 单击主页上的按钮后 当我到达第 2 页时 它应该刷新 因为我的项目中存在一些缓存问题 我在ngoninit上添加了window location
  • 您必须位于 angular-cli 项目中才能使用serve命令

    我正在尝试运行拖放示例dragula https github com valor software ng2 dragula 但是当我跑步时ng serve它抱怨 You have to be inside an angular cli p
  • 如何在Angular2中正确使用依赖注入(DI)?

    我一直在试图弄清楚 DI 依赖注入在 Angular2 中是如何工作的 每次当我尝试将服务 或类注入我的组件时 我都会遇到很多问题 从不同的谷歌搜索文章中 我需要使用providers 在组件配置中 或者有时我需要使用 Inject 在我的
  • TypeScript 中的可变参数方法至少需要一个参数

    我有一个像这样的方法 getValues args Array
  • 如何使用 Angular 2 修改 ng-bootstrap 轮播的 CSS

    最近 我尝试修改 ng bootstrap carousel 组件中的 carousel item 类 但是 我发现我需要在元数据中添加 encapsulation ViewEncapsulation None 使用此解决方案还会更改其他轮
  • Rxjs、fromEvent处理多个事件

    在 rxjs 5 1 中处理同一 DOM 节点上的多个事件的最佳方法是什么 fromEvent element event name 但我一次只能指定一个事件 我要手柄scroll wheel touchmove touchend even
  • 如何使用降级 Module() 引导应用程序与 ui-router 混合

    我正在使用 ui router 混合 https github com ui router angular hybrid https github com ui router angular hybrid 引导 经典 方式 我们在数据网格中
  • 在指令中动态添加 *ngIf

    如何动态地将 ngIf 添加到用属性指令修饰的元素 为了一个简单的实验 我尝试了这个 Directive selector lhUserHasRights export class UserHasRightsDirective implem
  • 从回调中访问状态

    我在从回调访问组件状态时遇到问题 国家的价值num更改正确 但此类更改对于加载时定义的回调函数不可见 import React useState from react class MyObject callback gt void cons
  • 通过扩展和实现的组合来理解 TS 的类型推断/缩小

    我有以下示例代码 class B implements Error name string message string stack undefined string function Foo x any if x instanceof E
  • 模板解析:找不到管道

    我收到错误 模板解析错误 找不到管道 amDateFormat 这是我的app module ts import NgModule from angular core import MomentModule from angular2 mo
  • 使用属性和泛型类型获取“keyof”中项目的类型

    我想定义一个具有泛型类型的接口 该接口必须接受一个对象 其键作为 根字段名称 值作为对象数组 该数组定义一些子字段 其键作为子字段的名称 type 作为字段值的类型 像这样的东西 interface Inputs emails email
  • Angular 模板验证表单

    我正在研究表单验证 我正在使用模板驱动的验证表单 其编码如下 现在工作正常 但是当我尝试添加时 username ngModel and password ngModel 在创建验证类的输入中 它向我显示一个错误 也请找到该错误 div c
  • Karma 单元测试 / STORE - 状态未定义

    运行应用程序时一切正常 但在帐户单元测试中似乎没有启动或我的状态已启动 我有什么明显做错的事情吗 这是错误 Test error index js 中的创建选择器返回一个带有未定义参数的函数 但仅在 karma 测试期间返回 账户 comp
  • 只能通过bootstrap将服务注入到服务中吗?

    我正在尝试连接一个使用 Http 服务的基本 Angular2 应用程序 我见过的大多数教程都是通过Component消耗Http服务 这似乎是错误的 除非瘦控制器的基本理念已经改变 但这是一个不同的问题 我想创建一个使用 Angular
  • 带纱线的 Angular CLI

    如何将 Angular Cli v6 0 3 的包管理器更改为yarn 我试过 ng set global packageManager yarn 但 Angular 说 get set 已被弃用 取而代之的是 config 命令 ng c
  • Webpack 与 typescript 获取 TypeScript 发出无输出错误

    我从这里得到了这个配置https www npmjs com package ts loader https www npmjs com package ts loader webpack config js var path requir
  • 为 Angular2 中的组件加载多个样式表

    我正在构建一个 angular2 应用程序 当我尝试为同一组件加载多个样式表时 我面临多个问题 这是我正在做的代码 import Component from angular core Component selector my tag t
  • CSF3 中的 Typescript 支持

    我正在使用 CSF3 编写故事 并且我想正确注释我的故事 我用谷歌搜索过 基本上找不到答案 我尝试过一些技巧here https github com storybookjs storybook issues 7677但没有任何效果 我发现
  • 使用 Vite 和 React 进行生产构建时出错:Uncaught TypeError 中的错误:_ 不是函数

    我在我的网站上使用 Vite React React Router 和 TypeScript 我在运行生产构建时遇到问题 在开发模式下一切正常 使用生产版本时 我的浏览器显示白色背景 并且在浏览器控制台中出现以下错误 上面的链接将我带到第

随机推荐