如何访问角度上的界面

Posted

技术标签:

【中文标题】如何访问角度上的界面【英文标题】:how to access interface on angular 【发布时间】:2022-01-19 06:27:29 【问题描述】:

我创建了一个接口名称 Alert ,其中包含(类型、消息)变量都是字符串。我还创建了一个名为 Alerts 的常量,其中包含一个 Alert 接口数组。当我想使用一个名为“alerts”的变量来访问接口 Alert 时,我收到一个名为 TS2564 的运行时错误:属性“alerts”没有初始化程序,并且没有在构造函数中明确分配。我已经为我的 html 模板安装了 ng-bootstrap。下面是我的代码。

contact-form.component.ts

    import  Component, OnInit  from '@angular/core';
    
    interface Alert 
      type: string;
      message: string;
    
    
    const ALERTS: Alert[] = [
      type: 'success',
      message: 'This is an success alert',
    , 
      type: 'info',
      message: 'This is an info alert',
    , 
      type: 'warning',
      message: 'This is a warning alert',
    , 
      type: 'danger',
      message: 'This is a danger alert',
    , 
      type: 'primary',
      message: 'This is a primary alert',
    , 
      type: 'secondary',
      message: 'This is a secondary alert',
    , 
      type: 'light',
      message: 'This is a light alert',
    , 
      type: 'dark',
      message: 'This is a dark alert',
    
    ];
    
    @Component(
      selector: 'app-contact-form',
      templateUrl: './contact-form.component.html',
      styleUrls: ['./contact-form.component.css']
    )
    export class ContactFormComponent 
    
    
      alerts: Alert[];
    
    
      constructor() 
        this.reset();
      
    
      close(alert: Alert) 
        this.alerts.splice(this.alerts.indexOf(alert), 1);
      
    
      reset() 
        this.alerts = Array.from(ALERTS);
      
    

contact-form.component.html

    <p *ngFor="let alert of alerts">
      <ngb-alert [type]="alert.type" (closed)="close(alert)"> alert.message </ngb-alert>
    </p>
    <p>
      <button type="button" class="btn btn-primary" (click)="reset()">Reset</button>

- app.component.html


    <app-contact-form></app-contact-form>

app.module.ts

    import  NgModule  from '@angular/core';
    import  FormsModule  from '@angular/forms';
    import  BrowserModule  from '@angular/platform-browser';
    
    import  AppComponent  from './app.component';
    import  ContactFormComponent  from './contact-form/contact-form.component';
    import  NgbModule  from '@ng-bootstrap/ng-bootstrap';
    
    @NgModule(
      declarations: [
        AppComponent,
        ContactFormComponent
      ],
      imports: [
        BrowserModule,
        FormsModule,
        NgbModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    )
    export class AppModule  

这是我的错误

错误:src/app/contact-form/contact-form.component.ts:43:3 - 错误 TS2564:属性 'alerts' 没有初始化程序,也不是绝对的 在构造函数中赋值。

43 个警报:警报[];

我正在使用

    Angular CLI:13.0.4 节点:14.15.5 包管理器:npm 6.14.11 操作系统:win32 x64

【问题讨论】:

【参考方案1】:

有几种方法可以解决这个问题:

方法 1:在声明类型的同时初始化 ContactFormComponent 中的变量

  alerts: Alert[] = [];

方法 2:在 ContactFormComponent 构造函数中初始化变量

constructor(name: string) 
    this.alerts = [];

方法3:将?作为后缀添加到变量中,以将其标记为possibly undefined

alerts?: Alert[];

【讨论】:

我想说的是方法 3 弊大于利。它会导致编译器将该属性视为不是nullundefined。然而,在这种情况下,属性 is undefined 除非正确初始化。我的建议是将类型更改为alerts?: Alert[](用于方法3)。 @PhilippMeissner 同意 要我编辑答案吗? :) 拜托,去吧。

以上是关于如何访问角度上的界面的主要内容,如果未能解决你的问题,请参考以下文章

如何访问角度组件 $postLink 中的元素

如何手机访问电脑服务器上的网页

如何访问脚本标签中的角度变量

如何验证zookeeper是不是有未授权访问的漏洞

如何在 ionic 2 应用程序中访问角度全局?

如何以角度访问来自不同组件的数组