#c# #angular #typescript
Вопрос:
В машинописном виде я получаю data
от ASP.NET Основной C# Dictionary
(Это не a Map
, но у него есть ключи и значения, т. Е. я могу запускать Object.keys(data)
и Object.values(data)
).
В HTML у меня есть угловой компонент, который привязывается к data
. Я не могу понять синтаксис привязки массива ключей и значений.
Грубо:
<dx-gallery [dataSource]="data">
<div *dxTemplate="let i of 'item'">
<dx-chart [dataSource]="i.value">
<dxi-series [name]="i.key" valueField="value.X"
i
представляет собой единственную пару ключ-значение (строка и массив) из всей коллекции данных. в C# я бы написал i.Key
и i.Value
, но для меня это не работает в машинописном формате (компонент не видит отображаемые данные).
Мне нужно связать key
и X
данные {A: Массив, B: Массив} , где массив-myObj[]
Комментарии:
1. Не могли бы вы немного прояснить для нас? Каков вывод
data
. например, если вы свяжете его с dom через<pre>{{data | json}}</pre>
. Кроме того,let i of 'item'
похоже, что он будет просто повторять символы в строке «элемент». Или, по крайней мере, поделитесь функцией, стоящей за входом *dxTemplate.2. данные-это набор пар ключ-значение, и я-каждая из пар. это есть в тексте.
3. как это не ТАКОЙ вопрос?
Ответ №1:
Вы могли бы попробовать родной KeyValuePipe
из углового: здесь
Это выглядело бы так и позволяло бы вам ссылаться на записи с key
и value
:
<dx-gallery [dataSource]="data">
<div *dxTemplate="let i of item | keyvalue">
<dx-chart [dataSource]="i.value">
<dxi-series [name]="i.key" valueField="value.X">
Ответ №2:
вы можете зацикливаться на объекте, захватывая его ключи.
напр.
// component.ts
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
data = {
prop1: 'a',
prop2: 'b'
};
keys = Object.keys(this.data);
}
—
//component.html
<p *ngFor="let k of keys">
{{k}} : {{data[k]}}
</p>
Кроме того, вы можете предоставить Object
классу доступ к html-шаблону и при необходимости захватить ключи и значения.
напр.
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
data = {
prop1: 'a',
prop2: 'b'
};
keys = Object.keys(this.data);
Object = Object;
}
—
// html
<p *ngFor="let k of Object.keys(data)">
{{k}} : {{data[k]}}
</p>
Однако добавление вызовов функций в ваш html иногда может быть менее эффективным, чем простое сохранение «ключей» var в ts
файле, так как функция будет пересматриваться с каждым циклом обнаружения изменений.
Комментарии:
1. Я не могу использовать ngFor, потому
dx-gallery
что он уже предоставляет ту же функциональность, и у него есть своя цель, от которой я не могу избавиться2. это слайдер, который отображает несколько элементов один за другим
3. может быть, в документах есть какая-то помощь, Извините, я мало что знаю об этой библиотеке, но удачи, похоже, там может быть какая-то полезная информация. Похоже
[dataSource]
, требуется вменение массива, а не объекта «Назначить массив параметру источника данных».4. Я думаю, что в typescript/js просто нет того, что я хочу, и я собираюсь использовать функциональный подход, как вы предложили.
5. похоже, вам может просто понадобиться преобразовать свой объект в массив, прежде чем отправлять его на вход [источник данных].