将值保存到全局变量

时间:2016-05-30 07:41:45

标签: typescript angular

如何为组件中的全局变量保存值并在不同的组件中使用它?我试图实现静态变量,但它似乎没有像我想的那样工作(我在不同的组件中得到未定义的值)。

编辑:忘记添加我不想出于原因使用服务。

静态代码我已经尝试过但无法开始工作:

http://plnkr.co/edit/RwVar8XneKfpm6RJSPyi?p=preview

export class MyClass {
  static _someVal: string;

  get someVal() => MyClass._someVal;
  set someVal(value: string) => MyClass._someVal = value;
}

2 个答案:

答案 0 :(得分:3)

我会创建一个共享服务并在其中设置我的值。此服务是一个简单的类,需要在引导应用程序时指定:

bootstrap(AppComponent, [ SharedService ]);

然后,您可以将其注入组件并将数据放入其中,这些数据将由所有组件(以及服务)共享。这是一个示例:

@Component({
  (...)
})
export class SomeComponent {
  constructor(private service:SharedService) {
    this.service.globalData = { ... };
  }
}

修改

您可以从模块导出数据容器(例如yourmodule):

export var dataContainer = {
  globalData: {}
};

并从其他模块导入:

import {dataContainer} from 'yourmodule';

@Component({
  (...)
})
export class SomeComponent {
  constructor() {
   dataContainer.globalData = { ... };
  }
}

答案 1 :(得分:1)

静态变量有效,但您也可以使用共享服务。 另请参阅https://angular.io/docs/ts/latest/cookbook/component-communication.html

对于静态变量,您需要添加一个getter,因为无法从模板访问静态变量。

if (includeGroupAccounts_) {
    query.JoinQueryOver(acc_ => acc_.Group, JoinType.LeftOuterJoin);
    keyUserRestriction.Add<Account>(acc_ => acc_.Group.KeyUserInternal == keyUser || acc_.Group.KeyUserExternal == keyUser);
}

然后你可以在模板中获得SELECT [...] FROM accounts this_ left outer join groups group1_ on this_.userGroup=group1_.id WHERE ((this_.keyUserInternal = @p0 or this_.keyUserExternal = @p1) or (this_.keyUserInternal = @p2 or this_.keyUserExternal = @p3)) and this_.deactivationDate > @p4 ORDER BY this_.name asc; ,如

Group

如果您将main.ts更改为

export class MyComponent {
  static _someVal = 123;

  get someVal() => MyComponent.someVal;
}

然后该值显示在123