在Angular4应用程序中,我使用一个服务来导出整个应用程序中使用的一些常量,枚举和接口。我想导出一个字符串数组,其键是anum中的键。这就是我现在所拥有的:
<?php
$gridColumns = [
['class' => 'yii\grid\SerialColumn'],
['class' => 'yii\grid\CheckboxColumn'],
....
'name',
'web_address',
...
]; ?>
<?php
echo GridView::widget([
'tableOptions' => ['id' => 'companies_grid_table',
'class' => 'table table-striped table-bordered table-hover'],
'id'=> 'companies_grid_display',
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => $gridColumns,
]);
?>
我想根据上面枚举的值导出一个字符串数组,如下所示:
export enum ContextMenus {
... (more options)
OBJECT_COLOR_RED = 120,
OBJECT_COLOR_GREEN = 121,
OBJECT_COLOR_BLUE = 122
}
我已尝试在论坛中使用let ObjectStyles : string[];
ObjectStyles[ContextMenus.OBJECT_COLOR_RED] = '#f00';
ObjectStyles[ContextMenus.OBJECT_COLOR_GREEN] = '#0f0'
ObjectStyles[ContextMenus.OBJECT_COLOR_BLUE] = '#00f';
export ObjectStyles; // THIS IS WHAT I DON'T KNOW HOW TO WRITE
,但当我尝试从此类组件中导入时:
export default RulesStyles
编译器抱怨模块&#39; app-options.service没有导出的成员ObjectStyles&#39;。
另一个建议的解决方案是像这样导出ObjectStyles:
import { ContextMenus, ObjectStyles } from '../app-options.service';
在这种情况下,编译器不会抱怨,但应用程序在运行时崩溃并出现以下错误:
export { ObjectStyles };
我怎么能做我想做的事?谢谢!
答案 0 :(得分:2)
我记得几周前我读过的有关计算属性作为数组键的内容。您必须将它们放在括号之间才能使其正常工作。所以,我可以使用这段代码做我想做的事情:
export var ObjectStyles = {
[ContextMenus.OBJECT_COLOR_RED] : '#f00',
[ContextMenus.OBJECT_COLOR_GREEN] : '#0f0',
[ContextMenus.OBJECT_COLOR_BLUE] : '#00f'
};
这样做可以让我从应用程序的每个组件导入和使用ObjectStyles。
答案 1 :(得分:2)
您已经找到了问题的解决方案(万岁!),但我想提供一些关于原始代码无效的背景信息。让我们看看您尝试编译时收到的错误消息:
预期的声明或声明。
出现这种情况是因为您尝试导出文字表达式 ObjectStyles
(评估对象)。除非您使用default
导出,否则您无法执行此操作,因为否则不会附加任何名称。
相反,您必须导出一个声明,该声明会在程序中引入一个名称并可选择分配给它。这就是您在答案中所做的 - 您重新声明命名变量ObjectStyles
,导出该变量,然后为其赋值。
您也可以修改原始示例:
// Personally I'd replace the 'let' with a 'const' here
// Also, it's worth noting that ObjectStyles is an object, not an array!
export let ObjectStyles = {};
ObjectStyles[ContextMenus.OBJECT_COLOR_RED] = '#f00';
ObjectStyles[ContextMenus.OBJECT_COLOR_GREEN] = '#0f0'
ObjectStyles[ContextMenus.OBJECT_COLOR_BLUE] = '#00f';
那就是说,你的版本更好 - 只是证明他们在功能上等同于:)