Angular 7与D3的集成:添加点击监听器会引发错误
创始人
2024-10-17 05:30:06
0

在Angular 7与D3集成时,添加点击监听器可能会引发错误。这是因为Angular使用Zone.js来管理事件循环,而D3不使用Zone.js。因此,当D3触发点击事件时,Angular无法检测到该事件并更新视图,从而导致错误。

为了解决这个问题,可以使用Angular的ChangeDetectorRef服务来手动触发变更检测。以下是一个示例代码:

首先,在组件类中注入ChangeDetectorRef服务:

import { Component, ChangeDetectorRef } from '@angular/core';

@Component({
  selector: 'app-my-component',
  template: `
` }) export class MyComponent { constructor(private cdr: ChangeDetectorRef) {} }

然后,在D3的点击监听器中手动触发变更检测:

import { Component, ChangeDetectorRef, AfterViewInit, ElementRef } from '@angular/core';
import * as d3 from 'd3';

@Component({
  selector: 'app-my-component',
  template: `
` }) export class MyComponent implements AfterViewInit { constructor(private cdr: ChangeDetectorRef, private elementRef: ElementRef) {} ngAfterViewInit() { const svg = d3.select('#chart') .append('svg') .attr('width', 400) .attr('height', 400); svg.append('rect') .attr('x', 50) .attr('y', 50) .attr('width', 100) .attr('height', 100) .style('fill', 'red') .on('click', () => { console.log('Clicked'); this.cdr.detectChanges(); // 手动触发变更检测 }); } }

通过调用ChangeDetectorRef的detectChanges()方法,可以手动触发Angular的变更检测机制,确保视图更新。

请注意,需要将ChangeDetectorRef服务注入到组件类中,并且使用ngAfterViewInit()钩子来确保D3的元素已经被渲染到DOM中。

相关内容

热门资讯

第八分钟辅助!西元红河辅助,真... 第八分钟辅助!西元红河辅助,真是是真的有辅助攻略(有挂方法)暗藏猫腻,小编详细说明西元红河辅助破解器...
9分钟辅助!奇迹陕西麻将辅助器... 9分钟辅助!奇迹陕西麻将辅助器,切实存在有辅助攻略(有挂方式)奇迹陕西麻将辅助器是不是有人用挂微扑克...
三分钟辅助!广西老友玩助手,真... 三分钟辅助!广西老友玩助手,真是存在有辅助教程(真是有挂)1、广西老友玩助手公共底牌简单,广西老友玩...
第1分钟辅助!闲来透视辅助器最... 第1分钟辅助!闲来透视辅助器最新版,一直存在有辅助app(确实有挂)闲来透视辅助器最新版能透视中分为...
第8分钟辅助!哈糖菠萝怎么挂,... 第8分钟辅助!哈糖菠萝怎么挂,真是是真的有辅助挂(确实有挂)1、上手简单,内置详细流程视频教学,新手...
第四分钟辅助!心悦填大坑辅助器... 第四分钟辅助!心悦填大坑辅助器,好像真的是有辅助方法(有挂教学)1、很好的工具软件,可以解锁游戏的心...
第4分钟辅助!陕麻圈黑科技,好... 第4分钟辅助!陕麻圈黑科技,好像是有辅助挂(有挂方略)陕麻圈黑科技脚本下载中分为三种模型:陕麻圈黑科...
第九分钟辅助!新九五有没有脚本... 第九分钟辅助!新九五有没有脚本,果然有辅助挂(新版有挂)1、进入到新九五有没有脚本是否有挂之后,能看...
第5分钟辅助!威信茶馆透视挂,... 第5分钟辅助!威信茶馆透视挂,一直有辅助插件(有挂讲解)威信茶馆透视挂辅助器是一种具有地方特色的麻将...
第9分钟辅助!蜀山四川破解版安... 第9分钟辅助!蜀山四川破解版安卓版辅助,原来有辅助脚本(有挂秘诀)蜀山四川破解版安卓版辅助破解侠是真...