我是一名C#程序员,正在努力学习Angular和Ionic。 我想像C#一样用字典做一些事情:
export class HomePage {
private times = [
{key: 'clockOn', value: '09:00'},
{key: 'lunchTime', value: '12:00'},
{key: 'backToWork',value: '13:00'},
{key: 'clockOff', value: '18:00'}
];
}
getHour(name: string) {
if(this.times[name] === 'clockOn'){
console.log('time: ' + this.times[name].value);
}
关于HTML
<ion-datetime class="time" id="coff" displayFormat="HH:mm"
[(ngModel)]="cOff" (ionChange)="getHour('clockOn')">
</ion-datetime>
在Chrome控制台上,我看到:
clockOn
未定义
首先,这是访问成员'价值'的正确sintax吗?
this.times[0].value
我想知道是否可以使用字符串作为索引器(键)访问数组元素,就像我们在C#中使用字典
一样例如:
this.times['clockOn'].value //would bring me its value like '09:00'
或访问元素的唯一方法是使用数字作为索引器?如下所示
this.times[0].key // bring me 'clockOn'
this.times[0].value // bring me '09:00'
答案 0 :(得分:1)
Dictionary是Angular / JavaScript与C#不同。
所以你的代码:
->getMapper()
这不起作用。
你必须使用
this.times['clockOn'].value
如果要使用像array [key]这样的键进行访问,则返回值以这种方式运行循环:
this.times[0].key // bring me 'clockOn'
this.times[0].value // bring me '09:00'
希望它有所帮助。
答案 1 :(得分:0)
就个人而言,我只会修改你的数据结构,如果它们只是硬编码的值。
private times = {
clockOn: '09:00',
lunchTime: '12:00',
backToWork: '13:00',
clockOff: '18:00'
};
getHour(key: string)
{
if (this.times[name] === 'clockOn')
{
console.log('time: ' + this.times[name].value);
}
}
<span *ngFor="(key, value) in times" *ngClick=getHour(key)>{{value}}</span>
拥有一个具有唯一键的对象,您可以使用括号表示法查找所需的项目更有效,因为它允许快速简单的查找。
如果您想使用原始数据结构,则必须传入重复项的索引,以便可以访问数组中的正确项。
所以你的标记看起来像这样:
&lt; span *ngFor="time in times" let i=index; *ngClick=getHour(i)>{{value}}</span>
getHour(index: number)
{
if (this.times[index].key === 'clockOn')
{
console.log('time: ' + this.times[index].value);
}
}