首页 > 其他分享 >Angular Component 内 set 关键字的使用

Angular Component 内 set 关键字的使用

时间:2023-12-02 15:55:59浏览次数:36  
标签:set name Component value 关键字 属性 Angular setter

"set" 关键字在Angular组件的TypeScript代码中通常用于创建和定义类的属性的setter方法。它是一种特殊的方法,负责设置类的私有成员变量的值。通过使用"set"关键字,我们可以在设置属性值时执行一些额外的逻辑,如输入验证、触发事件等。

让我们通过一个简单的例子来说明"set"关键字的用法。考虑一个Angular组件,其中有一个私有成员变量_name,我们希望在设置这个变量的同时,执行一些逻辑。这时就可以使用"set"关键字:

export class MyComponent {
  private _name: string;

  // 使用 set 关键字定义 setter 方法
  set name(value: string) {
    if (value && value.length > 0) {
      this._name = value;
      console.log(`Name set to: ${value}`);
    } else {
      console.error('Invalid name. Please provide a non-empty string.');
    }
  }

  // 其他组件代码...
}

在上面的例子中,我们定义了一个名为name的setter方法,它使用"set"关键字。当外部代码试图设置name属性时,实际上调用的是这个setter方法。在setter方法中,我们添加了一些逻辑来验证输入值是否合法,如果合法,则设置私有成员变量_name的值,并输出一条日志。如果输入值无效,则输出错误消息。

使用这样的setter方法有助于封装组件的内部逻辑,确保对属性的修改是受控的。这也是面向对象编程中封装的一个体现。

在Angular中,"set"关键字通常与属性绑定一起使用。例如,在组件的模板中,我们可以通过属性绑定将某个属性与组件类中的setter方法关联起来:

<!-- 组件模板 -->
<div>{{ myComponentName }}</div>

<!-- 组件类中的 TypeScript 代码 -->
export class MyComponent {
  private _name: string;

  // 使用 set 关键字定义 setter 方法
  set name(value: string) {
    if (value && value.length > 0) {
      this._name = value;
      console.log(`Name set to: ${value}`);
    } else {
      console.error('Invalid name. Please provide a non-empty string.');
    }
  }

  // 在组件的构造函数中创建组件属性
  constructor() {
    this.name = 'DefaultName'; // 这里会调用 setter 方法
  }

  // 在模板中绑定的属性,实际上是调用了 setter 方法
  get myComponentName(): string {
    return this._name;
  }

  // 其他组件代码...
}

在上面的例子中,模板中的myComponentName属性实际上调用了组件类中的name属性的setter方法,因为它们在getter方法中被绑定。这样,我们可以在设置属性时执行一些逻辑,而不仅仅是简单地赋值。

总的来说,"set"关键字是面向对象编程中用于创建setter方法的一种方式,它在Angular中的应用有助于更好地组织和封装组件的逻辑。通过setter方法,我们可以在属性被设置时执行额外的代码,以确保数据的有效性和安全性。

Spartacus 项目里也大量使用了 set 关键字:
type 是 CxInfo Component 经过 @Input 注解修饰后的私有属性,当其在父 Component 里被传递数据进来时,触发第 58 行的 set 关键字定义的 type 方法:

在这里插入图片描述
在这里插入图片描述

标签:set,name,Component,value,关键字,属性,Angular,setter
From: https://www.cnblogs.com/sap-jerry/p/17871705.html

相关文章

  • Angular Renderer2 的作用和使用场景介绍
    下图将cssclasscx-icon添加到hostdom上。最后效果如下:使用的renderer来自:import{Component,ElementRef,HostBinding,Input,Renderer2,}from'@angular/core';Angular的Renderer2是Angular框架中用于操作DOM元素的重要工具之一。Renderer2的主要......
  • Spring 中的 URL 处理工具类 UriComponentsBuilder
    UriComponentsBuilder是SpringFramework中的一个用于构建URI(UniformResourceIdentifier)和URL(UniformResourceLocator)的实用程序类。它提供了一种简单的方式来构建包含各种部分(如协议、主机、路径、查询参数等)的URI和URL,并支持对这些部分进行修改、替换和合并等操作。以下是......
  • Angular Input 注解在 Spartacus 项目开发中的实际应用场景一例
    @Input()装饰器是Angular中用于在组件中接收父组件传递的数据的一种方式。它的作用是将一个属性标记为输入属性,使得父组件可以将数据绑定到子组件的这些属性上。这样,父子组件之间就可以实现双向数据传递,实现更灵活的组件通信。下面是一个实际的例子:SearchBoxComponent是父组......
  • 如何拆解Unity 2022.3版本的AssetBundle
    1)如何拆解Unity2022.3版本的AssetBundle2)Unity2022LTS版本的稳定性3)关于AssetBundle禁用TypeTree之后的一些可序列化的问题这是第363篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。UWA社区主页:community.......
  • Inno Setup6.2.0汉化版软件及生成更新包脚本(三)
    按照 InnoSetup6.2.0汉化版软件及生成安装脚本(二)的安装包安装后可以安装以下脚本进行更新,会自动识别版本,关闭服务,关闭打开的客户端,更新客户端,最后启动服务。//定义常量#defineMyAppId"08FBA954-A306-4782-8C02-05F3DFE01772"#defineMyAppName"客户端名称"#defineO......
  • Inno Setup6.2.0汉化版软件及生成安装包脚本(二)
    个人研究,为了记录下打包脚本,大家也可以安装打包脚本向导一步一步生成。下面是我打包的脚本,其中包含了安装过程中执行批处理文件,是为了安装API服务,可以参考下:;脚本由InnoSetup脚本向导生成!;有关创建InnoSetup脚本文件的详细资料请查阅帮助文档!#defineMyAppName"客......
  • 使用Angular创建组件,并发布到npm上
    1.组件准备工作1.先新建一个组件库项目ngnewangular-npm-demo2.新建一个存放组件库的目录ngglibrarydemo--prefix=demo;3.进入projects/demo/src/lib目录下新建一个组件,我的组件名叫做list-pagenggclist-page其中对list-page组件的内容进行变更表示是自己......
  • Inno Setup6.2.0汉化版软件打包工具(1)
    InnoSetup是一个免费的安装制作软件,小巧、简便、精美是其最大特点,支持pascal脚本,能快速制作出标准Windows风格的安装界面,足以完成一般安装任务。该软件用Delphi写成,其官方网站同时也提供源程序免费下载。它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后......
  • Linux下通过AnySetup配置防火墙
     软件AnySetup主要功能主要功能是对Linux操作系统下的基本配置进行管理、多种服务配置进行管理、安全配置进行管理等。如:操作系统的升级管理,软件包的安装、更新和卸载管理,软件仓库源的管理,系统时间和时区的管理,系统语言环境的管理,网络环境的配置管理,系统服务的启动、关闭、......
  • java 8 利用lambda 获取 记录类(get/set) field 上面 注解
    packagetianrun.ziguan.api.center.alert.util;importcom.baomidou.mybatisplus.annotation.TableField;importjava.io.*;importjava.lang.annotation.Annotation;importjava.lang.invoke.SerializedLambda;importjava.lang.reflect.Field;importjava.lang.ref......