3

我想google diff/match/patch lib在一个角度应用程序中使用 来显示两个文本之间的区别。

我的用法是这样的:

public ContentHtml: SafeHtml;
compare(text1: string, text2: string):void {
        var dmp = new diff_match_patch();

        dmp.Diff_Timeout = 1;
        dmp.Diff_EditCost = 4;

        var d = dmp.diff_main(text1, text2);
        dmp.diff_cleanupSemantic(d);
        var ds = dmp.diff_prettyHtml(d);

        this.ContentHtml = this._sanitizer.bypassSecurityTrustHtml(ds);
}

问题是,我如何导入diff_match_patch这条线?
var dmp = new diff_match_patch();

4

2 回答 2

3

您需要在package.json.

"diff-match-patch": "^1.0.5",

并在组件中导入:

import { Component } from '@angular/core';
import DiffMatchPatch from 'diff-match-patch';
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  name = 'Angular';

  getDiff() {
    var dmp = new DiffMatchPatch();
    var diff = dmp.diff_main('Hello', 'Hallo');
    // Result: [(-1, "Hell"), (1, "G"), (0, "o"), (1, "odbye"), (0, " World.")]
    dmp.diff_cleanupSemantic(diff);
    // Result: [(-1, "Hello"), (1, "Goodbye"), (0, " World.")]
    console.log(diff);
  }

}

这是一个演示代码

于 2020-08-25T06:02:29.060 回答
0

基于@Shashank 的回答——为确保类型安全,您还可以通过以下方式安装相应的类型定义

npm i -D @types/diff-match-patch
or 
yarn add -D @types/diff-match-patch

这些类型定义自 2017 年以来没有太大变化,这意味着您将无法使用

import DiffMatchPatch from 'diff-match-patch';

因为这些类型没有默认导出——它们只导出名称相当糟糕的diff_match_patch (看起来像一个函数)——你一开始就试图运行它!

但是,打字稿还支持导入重命名,您可以使用它导入我们都习惯的可实例化类:

import { diff_match_patch as DiffMatchPatch } from 'diff-match-patch';

正确导入后,您将能够享受智能感知等功能:

在此处输入图像描述

于 2021-09-20T17:44:43.010 回答