如何为组件中的全局变量保存值并在不同的组件中使用它?我试图实现静态变量,但它似乎没有像我想的那样工作(我在不同的组件中得到未定义的值)。
编辑:忘记添加我不想出于原因使用服务。
静态代码我已经尝试过但无法开始工作:
http://plnkr.co/edit/RwVar8XneKfpm6RJSPyi?p=preview
export class MyClass {
static _someVal: string;
get someVal() => MyClass._someVal;
set someVal(value: string) => MyClass._someVal = value;
}
答案 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