То, что вы можете сделать, это поместить свойство, которое вы знаете, сначала в массив столбцов, а затем получить другие свойства и выполнить цикл, используя порядок в массиве столбцов.
Примерно так:
import {
Component
} from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
data = [{
"Bal Vivah": 1,
"Type": 0,
"districts": "East District"
},
{
"Bal Vivah": 1,
"Type": 0,
"districts": "West District"
},
{
"Bal Vivah": 1,
"Type": 0,
"districts": "North District"
}
]
columns: string[] = ["districts"];
constructor() {
// get the columns from the data
if (this.data) {
var dataObject = this.data[0];
for (var property in dataObject) {
if (property != "districts" && dataObject.hasOwnProperty(property)) {
this.columns.push(property);
}
}
}
}
}
{{column}}
{{columnData[column]| json}}
Примечание: я изменил ваши данные, чтобы они были действительными json.
Из спецификации языка C# (§ 17.3 и 14.16):
17.3 Константы
Константа является участником класса, который представляет постоянную величину: значение, которое может быть вычислено во время компиляции.
и
14.16 Константные выражения
Константное выражение является выражением, которое должно быть полностью оценено во время компиляции. Где выражение требуется, чтобы быть постоянным, это обозначается в грамматике при помощи константного выражения. [...] следующие конструкции разрешены в константных выражениях:
- Литералы (включая пустой литерал)
- Ссылки на членов константы класса и типов структуры.
- Ссылки на членов перечисляемых типов.
- Заключенные в скобки подвыражения, которые являются самостоятельно константными выражениями.
- Выражения приведения типа, если целевой тип является одним из упомянутых выше типов.
- Предопределенный, проверенный и неконтролируемый, +, –!, и ~ унарные операторы.
- Предопределенный +, – *,/, %, <<>>, и, |, ^, &&, ||, ==! =, <>, <=, и> = бинарные операторы, если каждый операнд имеет упомянутый выше тип.
- ?: условный оператор.
- выражения sizeof, если неуправляемый тип является одним из типов, указанных в §14.5.12.
- выражения значения по умолчанию, если тип является одним из типов, упомянутых выше или типа, являются ссылочным типом или параметром типа, который, как известно, является ссылочным типом (§25.7).
Следующие преобразования разрешены в константных выражениях:
- Преобразования идентификационных данных
- Числовые преобразования
- Преобразования перечисления
Другой способ достигнуть, что Вы хотите, состоит в том, чтобы использовать статического участника только для чтения. Участники только для чтения оценены во времени выполнения, не во время компиляции. Поэтому можно использовать ToString () метод.
private static readonly EscapeString = EscapeChar.ToString();
Примечание: Поскольку поле только для чтения может быть инициализировано или в объявлении или в конструкторе класса, поля только для чтения могут иметь различные значения в зависимости от используемого конструктора.
Вот хорошая статья о различиях между константой и участниками только для чтения.
Я не вижу способа сделать его, который я согласовываю, определенная жалость - но сделайте Вас, действительно нуждаются в нем, чтобы быть a const
вместо static readonly
? У последнего будет почти та же семантика.
Единственными путями я могу думать (оба не идеальные):
const string EscapeString = "\\";
private static readonly EscapeString = EscapeChar.ToString();
Или Вы могли просто продолжить работать с символьной версией и ToString () его каждый раз, когда Вам нужна строковая версия :)