首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在angular 7中高亮显示两个string对象中的不同值?

在Angular 7中,可以使用自定义指令来实现高亮显示两个字符串对象中的不同值。以下是一个实现的示例代码:

  1. 创建一个名为highlight-diff.directive.ts的文件,用于定义自定义指令:
代码语言:txt
复制
import { Directive, ElementRef, Input, OnInit } from '@angular/core';

@Directive({
  selector: '[appHighlightDiff]'
})
export class HighlightDiffDirective implements OnInit {
  @Input('appHighlightDiff') strings: string[];

  constructor(private elementRef: ElementRef) { }

  ngOnInit() {
    const [str1, str2] = this.strings;
    const diffIndexes = this.getDiffIndexes(str1, str2);

    let highlightedText = '';
    for (let i = 0; i < str1.length; i++) {
      const char = str1[i];
      const isDifferent = diffIndexes.includes(i);
      highlightedText += isDifferent ? `<span class="highlight">${char}</span>` : char;
    }

    this.elementRef.nativeElement.innerHTML = highlightedText;
  }

  private getDiffIndexes(str1: string, str2: string): number[] {
    const diffIndexes = [];
    for (let i = 0; i < str1.length; i++) {
      if (str1[i] !== str2[i]) {
        diffIndexes.push(i);
      }
    }
    return diffIndexes;
  }
}
  1. 在需要应用高亮显示的地方,如组件的HTML模板文件中,使用自定义指令并传入两个字符串对象:
代码语言:txt
复制
<div [appHighlightDiff]="['string1', 'string2']"></div>
  1. 添加CSS样式来定义高亮显示的样式:
代码语言:txt
复制
.highlight {
  background-color: yellow;
}

上述代码会根据两个字符串对象的内容进行对比,并将不同的字符以黄色背景高亮显示出来。

请注意,这只是一个基本实现,您可以根据实际需求进行扩展和调整。此外,这个示例中没有涉及到腾讯云的相关产品,因此无需提供产品链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AngularDart4.0 高级-属性(Attribute)指令 顶

两个例子是NgFor和NgIf。 在“结构指令”页面中了解它们。 属性指令被用作元素属性。 例如,“模板语法”页面内置NgStyle指令可以同时更改多个元素样式。...通过@Input数据绑定将传入指令 目前,高亮颜色在指令中被硬编码。 这是不灵活。 在本节,您将为开发人员提供在应用指令时设置突出显示颜色能力。... 修改AppComponent.color,使其没有初始。 class AppComponent { String color; } 刷新浏览器。 这是执行线束和指令。 ?...defaultColor; 修改指令onMouseEnter,使其首先尝试用highlightColor高亮显示,然后用defaultColor,如果两个属性都是未定义,则回退到“红色”。...没有@Input,Angular拒绝绑定到属性。 您之前已将模板HTML绑定到组件属性,并且从未使用@Input。 有什么不同? 差别是一个信任问题。 Angular将组件模板视为属于组件。

3.2K10

Angular快速学习笔记(3) -- 组件与模板

显示数据 在 Angular 中最典型数据显示方式,就是把 HTML 模板控件绑定到 Angular 组件属性。...使用插表达式显示组件属性 要显示组件属性,最简单方式就是通过插表达式 (interpolation) 来绑定属性名。...要使用插表达式,就把属性名包裹在双花括号里放进视图模板, {{myHero}}。...下列插表达式通过把括号两个数字相加说明了这一点: The sum of 1 + 1 is {{1 + 1}} 表达式还可以调用宿主组件方法,就像下面用 getVal(): ...该方法接受当前和上一属性 [SimpleChanges](https://angular.cn/api/core/SimpleChanges) 对象当被绑定输入属性发生变化时调用,首次调用一定会发生在

15.3K30
  • AngularDart 4.0 高级-生命周期钩子 顶

    OnChanges 看看每次组件输入属性发生变化时,Angular如何用变更对象调用ngOnChanges钩子。 显示如何解释更改对象。...,该对象将每个已更改属性名称映射到保存当前和前一个属性SimpleChange对象。...日志条目显示为power属性更改字符串。 但ngOnChanges并没有捕捉到hero.name变化,这一开始令人惊讶。 当输入属性改变时,Angular只会调用钩子。...hero属性是对hero对象引用。 Angular并不在意英雄自己name属性发生了变化。 英雄对象引用没有改变,所以从Angular角度来看,没有改变反馈!...当英雄或权力没有实质性变化时,它会向日志写入特殊消息,以便您可以看到DoCheck被多次调用。 结果是高亮: ?

    6.2K10

    AngularDart4.0 指南- 用户输入 顶

    用户操作,点击链接,按下按钮,输入文字引发DOM事件。 本页说明如何使用Angular事件绑定语法将这些事件绑定到组件事件处理程序。 运行实例(查看源代码)。...例如,鼠标事件包含与输入框编辑事件不同信息。 所有标准DOM Event对象都有一个target属性,它是引发事件元素引用。...每次调用之后,onKey()方法将输入框附加到组件values属性,后跟一个分隔符(|)。 该模板使用Angular({{...}})来显示属性。...代码使用box变量来获取输入元素,并在标签之间进行插显示。 模板是完全独立。 它不绑定到组件,组件什么也不做。 在输入框输入内容,然后观看每个按键显示更新。 ?...(blur)事件绑定到两个语句。 第一个语句调用addHero()。 第二个语句newHero.value =''在新英雄添加到列表后清除输入框。 源代码 这里是在这个页面讨论所有代码。

    3.5K00

    AngularDart4.0 指南- 模板语法二 顶

    模板语句通常包含一个接收器,它响应事件执行一个动作,例如将HTML控件存储到模型。 绑定通过一个名为$event事件对象来传递关于该事件信息,包括数据。 事件对象形状由目标事件决定。...例如,重新查询服务器可能会重置所有新英雄对象列表。 大多数,如果不是全部,以前显示英雄。 你知道这一点,因为每个英雄ID没有改变。 但是Angular只能看到新对象引用列表。...它可以根据切换条件从几个可能元素显示一个元素。 Angular只把选中元素放入DOM。...模板引用变量警告说明 模板引用变量(#phone)与模板输入变量(let phone)不同您在*ngFor可能看到那样。 了解“结构指令”指南中差异。 引用变量范围是整个模板。...input属性通常接收数据。 Output属性公开事件生成器,Stream对象。 术语input和Output反映了目标指令视角。 ?

    30K20

    AngularJS入门心得4——漫谈指令scope

    my-dialog.html';     一个可以接受两个参数函数,参数为tElement和tAttrs并返回一个外部HTML文件路径字符串,templateUrl: function (elem...默认是false。指令内部可以访问外部指令作用域,并且模板也可以访问外部作用域对象。为了将作用域传递进去,scope参数必须通过{}或true设置成隔离作用域。...从script.js我们可以看出,加入了参数transclude和templateUrl,这两个是配合使用。...显示到my-dialog.htmldiv标签。同时,{{name}}能够读取到指令外作用域,即控制器scope.name。   ...这是一个最干净情况,index.html{{name}}到控制器Controller读取为“Tobias”。 2.

    1.9K60

    Angular实战之使用NG-ZORRO创建一个企业级后台框架(进阶篇)

    前言:   上一篇文章我们讲了如何在创建Angular项目中快速引入ng-zorro-antd企业台组件库,并且快速构建后台管理页面框架模板。...该方法接受当前和上一属性 SimpleChanges 对象 在 ngOnInit() 之前以及所绑定一个或多个输入属性发生变化时都会调用。...ngOnInit() 在 Angular 第一次显示数据绑定和设置指令/组件输入属性之后,初始化指令/组件。 在第一轮 ngOnChanges() 完成之后调用,只调用一次。...修改项目默认调转页面,Angular应用多模块路由配置: 找到app-routing.module.ts文件,在【routes】对象声明新模块路由,以及项目默认调转页面地址修改。 ?...2、配置首页组件路由(多模块路由完美解决): 首先,我们博客项目存在博客管理和用户管理两个核心模块,我们创建了两个模块,那么我们如何在【app-routing.module.ts】应用路由文件配置多个模块路由

    4K20

    AngularDart 4.0 高级-管道 顶

    事实上,您可能会喜欢将它们应用到HTML模板,就像样式一样。 介绍Angular管道,这是一种编写显示转换方法,您可以在HTML声明这些转换。 尝试一下实例(查看源代码)。...如果管道接受多个参数,请使用冒号分隔slice:1:5) 修改生日模板以给日期管道一个格式参数。...虽然你没有得到你想要行为,但Angular并没有被破坏。 它只是使用不同变更检测算法,忽略对列表或其任何项目的更改。...纯净管道 仅当Angular检测到对输入纯粹更改时才执行纯管道。 在AngularDart,纯粹改变仅仅来自对象引用改变(假设所有东西都是Dart对象)。...下一步 管道是封装和共享常见显示转换好方法。 像样式一样使用它们,将它们放入模板表达式,以丰富视图吸引力和可用性。 在API参考中探索Angular内置管道库。

    6.4K20

    Angular 自定义属性指令

    本文将使用 UltimateAngular/angular-pro-src 示例,来一步步介绍自定义属性指令相关知识。...该示例定义了两个自定义指令: CreditCardDirective —— 信用卡指令,用于对输入 16 位信用卡号码,格式化显示(每 4 位数字为一组,中间用空格符分隔)。...,参数列表 $event 这个参数,它是一个特殊 token,用于表示事件对象。...此外,除了监听宿主元素外,我们也可以监听 window 或 document 对象事件, @HostListener('document:click', ['$event']) 。...本文通过 CreditCardDirective 和 TooltipDirective 两个指令,介绍了 Angular 自定义属性指令所涉及相关基础知识,若想继续深入学习的话,可以阅读 Angular

    2K30

    AngularJSdigest循环和$apply

    最近在写AngularJS,遇到一个问题,在Ajax异步请求后台数据,然后将结果赋值给当前scope对象属性,在页面怎么都取不到,然而在js端却可以正常打印出来。...三、页面$digest循环 (1)angular会设置一个隐式监控器,将输入字段绑定为当前...循环之前,会触发该(ng-model)上运行验证和格式化操作; (5)由于在digest循环中值发生了变化,angular需要再次运行这一循环以确定它没有改变作用域对象其他。...那么这两个变化多会引起fullName变化,因此需要再次确认); (6)$digest循环退出,浏览器重绘DOM以刷新视图。...当手动处理事件,使用第三框架(比如jquery)或者调用setTimeout都可以使用apply()函数将传递到angular应用

    3.2K41

    【玩转腾讯云】手把手教你使用VueReactAngular三大框架开发Pagination分页组件

    19世纪著名印象派画家莫奈,喜欢对着同一处景物,分别画出对象不同时间,不同光线下色彩变化。 比如不同季节三株白杨: ? 比如一天不同时刻浮翁大教堂: ?...3.3 Angular版本 和Vue/React这种专注View视图层轻量级框架不同Angular是一个很重框架,配备非常完整,Web开发过程你需要一切,Angular框架都给你提供好了,你只需要随手取用即可...还有就是Angular推崇是面向对象编程范式,Angular里面的几乎一切都是类和对象,除了刚才一经介绍模块和组件,还有服务(Service)、管道(Pipe)等,都是类(class)。...指令,在li元素循环lists数组,并将name显示出来。...其中li元素上绑定key与Vuekey作用类似。

    7.8K00

    在前端理解MVC服务之 Angular篇(完结)

    模型将具有以下字段: id 唯一 name 用户名 age 用户年龄 complete bool,可以知道此条数据是否有用 用户Class已经被写在TS。...不管怎么样,该对象从Localstorage构建一个接受一个普通对象,该对象将会提供数据。此纯对象必须符合接口,以便任何纯对象都不能实例化,而是满足定义接口对象。...但是,我们注意到,前几部分许多 DOM 操作代码已通过 Angular 得到解决,它们提供了两个结构指令, @ ngFor 和 _ ngIf,它们允许从模板本身轻松操作 DOM。...Controller将通过依赖注入(DI)接收其具有的两个依赖项(Service 和 formBuilder).这些依赖项将存储在Controller私有变量。...需要强调是,这篇文章要点是,让你了解不同文件具有不同功能项目结构,以及View如何完全独立于Model/Service和Controller。

    4.1K20

    【转载】【ionic+angularjs】angularjs ui-router路由简介

    比如: 我们点击了一个link,我们需要在视图中跳转到指定一个页面,那么ngRoute已经满足了我们需求,而当我们点击时候,需要在分别在不同地方跳转两个不同页面的时候,ngRoute就不够用了...rule:你想重定向url路径或一个返回网址路径规则函数。函数传入两个参数:$injector和$location服务,而且必须返回一个stringurl。...参数: stateOeName:string,你想要生成url状态或者状态对象。 params:object,一个用于填充状态需要参数对象。 options:可选配置对象。...预载入选项需要一个对象,这个对象key即要注入到控制器依赖,这个对象value为需要被载入factory服务。 如果传入时字符串,angular-route会试图匹配已经注册服务。...如果传入是函数,该函数将会被注入,并且该函数返回便是控制器依赖之一。如果该函数返回一个数据保证(promise),这个数据保证将在控制器被实例化前被预先载入并且数据会被注入到控制器

    7.4K70

    AngularDart4.0 指南- 显示数据 顶

    您可以通过将HTML模板控件绑定到Angular组件属性来显示数据。 在这个页面,您将创建一个包含英雄列表组件。 您将显示英雄名单列表,并有条件地在列表下方显示一条消息。...最终用户界面如下所示: ? 现场示例(查看源代码)演示了此页面描述所有语法和代码片段。 用插显示组件属性 显示组件属性最简单方法是通过插来绑定属性名称。...修改后模板使用双重大括号插显示两个组件属性: template: ''' {{title}} My favorite hero is: {{myHero}} ''', Angular会自动从组件抽取title和myHero属性,并将这些插入到浏览器。...它应该显示标题和英雄名字: ? 模板内嵌或模板文件? 您可以将组件模板存储在两个地方之一

    5.3K10

    Angular 6.x 快速入门

    第二节 - 插表达式 在 Angular ,我们可以使用插语法实现数据绑定。...name = 'Angular'; } 定义数据接口 在 TypeScript 接口是一个非常灵活概念,除了可用于对类一部分行为进行抽象外,也可用于对「对象形状(Shape)」进行描述...基础知识 ngIf 指令简介 该指令用于根据表达式,动态控制模板内容显示与隐藏。它与 AngularJS 1.x ng-if 指令功能是等价。... ngFor 指令简介 该指令用于基于可迭代对象每一项创建相应模板。它与 AngularJS 1.x ng-repeat 指令功能是等价。...反之,我们路径将在 URL 地址栏显示,随后进行后续视图更新,以匹配 routerLink 设置

    14.1K20

    2、Angular JS 学习笔记 – 双向数据绑定和Scope概念

    作用域是一个对象引用着应用模型,它是表达式运行上下文环境。作用域层级结构模拟应用dom层级结构;作用域能够监视表达式和事件传播。...这是一个重要点,因为它使得控制器不用知道将要如何显示,大大提升了测试环境; angular.module('scopeExample', []) .controller('MyController...在这个例子,样式定义了红色高亮区域为socpe区域,子作用域是必须,因为repeater需要计算{{name}},但是依赖于不同作用域,最后结果也不同,类似的,计算{{department}}...应小心脏检查函数没有任何dom访问,dom访问速度要比访问javascript对象慢很多。 作用域$watch深度 脏检查可以基于三种策略完成:引用、集合内容、和。...$watch(watchExpression,listener))当监视表达式整体返回转变成另一个新时会检测到变化。如果这个是一个数组或对象,它们内部变化则无法监测到。

    13.2K20

    【ionic+angularjs】angularjs ui-router路由简介($urlRouter、$state、$stateProvider、ui-sref....)

    比如: 我们点击了一个link,我们需要在视图中跳转到指定一个页面,那么ngRoute已经满足了我们需求,而当我们点击时候,需要在分别在不同地方跳转两个不同页面的时候,ngRoute就不够用了...rule:你想重定向url路径或一个返回网址路径规则函数。函数传入两个参数:$injector和$location服务,而且必须返回一个stringurl。...参数: stateOeName:string,你想要生成url状态或者状态对象。 params:object,一个用于填充状态需要参数对象。 options:可选配置对象。...预载入选项需要一个对象,这个对象key即要注入到控制器依赖,这个对象value为需要被载入factory服务。 如果传入时字符串,angular-route会试图匹配已经注册服务。...如果传入是函数,该函数将会被注入,并且该函数返回便是控制器依赖之一。如果该函数返回一个数据保证(promise),这个数据保证将在控制器被实例化前被预先载入并且数据会被注入到控制器

    7.3K40

    AngularDart4.0 指南- 依赖注入 顶

    唯一目的是显示显示英雄名字列表HeroListComponent。 HeroListComponent这个版本从mockHeroes获取它英雄,这是一个在单独文件定义内存集合。...第二个是一个命名参数,比如useClass,你可以把它看作是创建依赖关系方法。 有很多方法可以创建依赖关系,就像写许多配方方法一样。 替换提供者类 偶尔你会要求不同类提供服务。...当组件要求输入新或旧记录器时,依赖注入器应该注入该单例实例。 OldLogger应该是NewLogger别名。 你当然不希望在你应用程序中使用两个不同NewLogger实例。...不幸是,如果你试图用useClass将OldLogger别名到NewLogger,那就只能得到两个不同实例。 const [NewLogger, // Not aliased!...概要 你在这个页面学习了Angular依赖注入基础知识。 您可以注册各种提供程序,并且您知道如何通过向构造函数添加参数来请求注入对象服务)。 Angular依赖注入比本页描述更有能力。

    5.7K20

    在Lucene或Solr实现高亮策略

    景 最近要做个高亮搜索需求,以前也搞过,所以没啥难度,只不过原来用是Lucene,现在要换成Solr而已,在Lucene4.x时候,散仙在以前文章也分析过如何在搜索时候实现高亮,主要有三种方式...,具体内容,请参考散仙以前2篇文章: 第一:在Lucene4.3实现高亮方式 http://qindongliang.iteye.com/blog/1953409 第二:在Solr4.3服务端高亮方式...可靠性:高,在浏览器禁用js脚本情况下,仍可以正常显示 前端高亮: 性能:由客户端渲染,相对性能稍高 可靠性:低,在浏览器禁用js脚本情况下,高亮失效 四:注意事项 前台高亮时,需要把句子分词后词组...(); //使用guava库,将iteratro对象转换为List对象 List list=Lists.newArrayList...(); //使用guava库,将iteratro对象转换为List对象 List list=Lists.newArrayList

    97350
    领券