javascript - angular2 事件监听 *NgFor 迭代变量

标签 javascript angular typescript

我一直在探索 angular2 作为解决特定数据绑定(bind)挑战的方法。

我有一个 javascript 对象数组,本质上是一个数据库记录集,我在 UI 中将其作为 html 表显示。我在每一行上都有各种菜单和输入,以允许用户修改底层记录集。

整体工作流是用户从外部数据库加载记录集,在 UI 中对其进行操作,然后将编辑提交回数据库。

下面是数据表组件的 typescript 代码片段:

@Component({
selector: 'employee_table',
template: `
        <h2>{{ title }}</h2>
        <table>
            <tr>
                <th colspan=6>Name</th>
                <th>Level</th>
                <th>Rating</th>
                <th>Suggested Total Pay</th>
                <th>Total Pay Override</th>
                <th>Comment</th>
                <th></th>
                <th></th>
            </tr>
            <tr *ngFor="#ee of ee_data" [className]=ee.tr_classes [class.selected]="ee.is_selected">
                <td *ngFor="#x of ee.mgmt_spacer"></td>
                <td [attr.colspan]="[6-ee.mgmt_tier]">{{ee.name}}</td>
                <td>{{ee.level}}</td>
                <td>{{ee.rating}}</td>
                <td>{{ee.suggested_tct | currency:'USD':true:'1.0-2'}}</td>
                <td><input type="text" placeholder="e.g. $100,000"></td>
                <td><textarea rows="1" placeholder="Explain Override" autoGrow ></textarea></td> 
                <td class="txt_btn dr_toggle_btn"
                        (click)="drToggle($event)">{{ee.show_direct && '-' || '+'}}</td>
                <td class="txt_btn desc_toggle_btn">{{ee.show_descendants && '--' || '++'}}</td>
            </tr>
        <table>
        <span class="table_return">Back to Top</span>
            `,
    providers: [EmployeeTableService],
    directives: [AutoGrowDirective]
})
export class EmployeeTableComponent{
    title: string = "Employee Data";
    ee_data;

    constructor(employeeTableService: EmployeeTableService){
        this.ee_data = employeeTableService.getData();
    }

    drToggle(event){
        alert('HEY! '+event.target+'; '+event.target.value);
    }

}

我正在为如何使用模板中定义的事件监听器将 javascript 对象的句柄传递给 drToggle() 而苦恼。 .

我想将底层 javascript 数组(记录集 ee_data)公开给编辑该记录集的处理函数,让 Angular 自动更新 html。

然而,似乎我只能通过 $event 关键字。我可以想象地审问 $event.target获得 parent <tr> , 然后查看其 <td> 的 html 值元素找到足够的信息来定位javascript对象中的相应记录,但这似乎很迂回。

在ts模板中,有一个迭代变量#ee用于从 javascript 数组构建 html 表。有什么办法可以让我通过同样的 #ee直接变量到我的事件监听器?

最佳答案

<tr *ngFor="let ee of ee_data"
...
(click)="drToggle(ee)"

你可以只传递迭代变量ee

*ngFor 中声明变量的语法是 let 而不是 # 几个月了。

关于javascript - angular2 事件监听 *NgFor 迭代变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40429467/

相关文章:

javascript - 学习 Array.prototype 并计算其长度

angular - 发布 Angular4 应用程序

angular - 拖动以在页面周围移动组件?

typescript - 为什么强制类型转换不如显式类型化变量声明类型安全?

javascript - 关闭 Bootstrap 模式后重置验证消息

javascript - 将代码与其他脚本(命名空间)隔离

javascript - KineticJS - 使用 url 的自定义鼠标光标样式

javascript - 带有 new Date() 的随机错误转换时间戳

reactjs - 允许无状态函数接受多个不同的 prop 接口(interface)

javascript - ng build --prod 的 javascript 加载问题