【问题标题】:angular2 Create a variable inside a constructorangular2 在构造函数中创建一个变量
【发布时间】:2017-02-13 11:26:31
【问题描述】:

我想在构造函数(或函数)中创建一个变量。我不想在整个班级中创建。这可能吗?

这是我的代码

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { CustomValidators } from 'ng2-validation';
import { TranslatorService } from '../../../../core/translator/translator.service';
import { CarBrandService } from '../car-brand.service';
import { Response } from '../../../../shared/models/response';
import { SessionService } from '../../../../shared/services/session/session.service';
import { ServerService } from '../../../../shared/services/server/server.service';
import { ToasterService, ToasterConfig } from 'angular2-toaster/angular2-toaster';
import { Router } from '@angular/router';
import { CarBrand } from '../car-brand';
import { SharedModule } from '../../../../shared/shared.module';
import { Table } from '../../../../shared/models/table';
import { TableRow } from '../../../../shared/models/table-row';
import { TableAction } from '../../../../shared/models/table-action';
import { ListTableComponent } from '../../../../shared/components/list-table/list-table.component';

@Component({
  selector: 'car-brand-index',
  templateUrl: './index.component.html',
  styleUrls: ['./index.component.scss'],
  providers: [CarBrandService, Response, SessionService, ServerService,             ListTableComponent, TableAction, Table, TableRow]
})
export class CarBrandIndexComponent implements OnInit {
  error : String;
  total : number;
  items : Array<CarBrand>;
  table : Table;
  constructor(public translator: TranslatorService, private mainService : CarBrandService, public sessionService : SessionService, public response : Response, private toasterService: ToasterService, private router: Router) {

    var action : TableAction;
    action.value = "/view/";
    action.type = "link";
    this.table.actions.push(action);
    var action : TableAction;
    action.value = "/edit/";
    action.type = "link";
    this.table.actions.push(action);
    this.table.columns = ["MODULES.COMMON.LOGO", "MODULES.COMMON.NAME", "MODULES.COMMON.ACTIONS"];    
    this.getItems(1,10);
  }

  getItems(pageNumber : number, pageSize : number){
//Do something
            });        
        }
        else
          this.error = result.code;
    });
  }
  ngOnInit() {
       }
}

这是 TableAction

export class TableAction {
    type : String;
    value : String;
    name : String;
    icon : String;
}

但是在下面一行 var action : TableAction; 它告诉我动作是未定义的。有没有办法解决这个问题而不必在类下面声明 var?

【问题讨论】:

  • 它未定义,因为您从未初始化我认为的值。所以试试 let action: TableAction = new TableAction();

标签: angular


【解决方案1】:

var action : TableAction;您只需讲述“动作”类型。现在,如果您尝试将 {a: 1, b: 2} 之类的操作分配给操作 - 您将看到一个错误。

但是如果你写 var action : TableAction = new TableAction() - 你会在你的范围内有一个你想要的实例(构造器/函数),并为变量“action”定义一个类型。

建议:用 let 代替 var

let action = new TableAction(); 

使用关键字“let”定义的变量的行为更容易预测。

constructor() {
  let action1 = new TableAction("/view/", "link");
  this.table.actions.push(action1);

  let action2 = new TableAction("/edit/", "link");
  this.table.actions.push(action2);
  // ...
}

export class TableAction {
  type : String;
  value : String;
  name : String;
  icon: String;

  constructor(value, type) { 
    this.value = value;
    this.type = type;
  }
}

【讨论】:

    【解决方案2】:
    var action : TableAction
    

    是一个声明。

    var action : TableAction=new TableAction();
    

    var action : TableAction = {};
    

    是一个定义。 您正在尝试设置未定义的 action 的对象属性

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 2020-11-22
      • 2013-09-11
      • 2016-09-14
      • 1970-01-01
      • 2017-03-02
      • 2016-01-18
      • 2021-02-07
      • 1970-01-01
      相关资源
      最近更新 更多