Angular 6 Select 在 *ngfor table
Angular 6 Select in *ngfor table
我有一个 Angular 6 组件,它获取一个可观察的用户列表,然后使用 *ngFor 语句显示 table 个用户。每行我都包含一个提交按钮,该按钮调用组件 ts 文件中的一个函数,为该行传入用户。到目前为止,这是按预期工作的。
现在我想向每一行添加一个 select 选项,其中包含用户要执行的操作列表。如何获取正确行的 selected 操作的值?
这是我目前的情况。
-从 http 调用返回的示例 JSON 对象。
[
{
"userId": 1,
"username": "user1",
"firstName": "f1",
"lastName": "l1",
"active": true
},
{
"userId": 2,
"username": "user2",
"firstName": "f2",
"lastName": "l2",
"active": true
}
]
在 component.ts 中,我将 UserSearchModel[] 类型的 属性 订阅到 json 响应,并且还创建了一个供 table 调用的函数。
users$: UserSearchModel[];
submituseraction(user: UserSearchModel) {
console.log(user.userId);
}
这是模型。
export class UserSearchModel {
userId: number;
username: string;
firstName: string;
lastName: string;
active: boolean;
}
在 html 我有以下 tr 用于显示和提交数据。
<tr *ngFor="let user of users$">
<td>{{ user.username}}</td>
<td style="word-break: break-all">{{ user.firstName }}</td>
<td style="word-break: break-all">{{ user.lastName }}</td>
<td>{{ user.active }}</td>
<td class="text-nowrap">
<select name="usersearchactions" id="usersearchactions" title="Actions">
<option value="0">Update User Info</option>
<option value="1">Update Email</option>
<option value="2">Reset Password</option>
<option value="3">Notification Settings</option>
<option value="11">Research</option>
</select>
<button (click)="submituseraction(user)" class="btn btn-primary btn-xs" type="submit">GO!</button>
</td>
</tr>
到目前为止一切都很好。我拉出用户列表并正确显示它们。每行还会有一个下拉列表 select 要对用户执行的操作。我还在我的 submituseraction 方法中获得了正确的用户。我遇到的唯一问题是如何在我的 submituseraction 方法中为该用户获取 selected 操作?我希望有一种简单的方法可以在不做太多更改的情况下获得该值。
我确实尝试更新 UserSearchModel 以包含一个用我的列表填充的新 UserAction[] 并使用 *ngfor 命令显示它,这样我就可以从传递给函数的用户对象中获取它。这不起作用,因为在订阅事件中填充数据后 UserAction[] 未定义。我什至试图将其设置为只读并填充到构造函数中,但没有成功。这两种方式我都以未定义的 UserAction[] 结束,所以现在 select.
中没有填充任何操作
export class UserSearchModel {
userId: number;
username: string;
firstName: string;
lastName: string;
active: boolean;
userActions: UserAction[] = [
{ id: 0, name: "Update User Info" },
{ id: 1, name: "Update Email" },
{ id: 2, name: "Reset Password" },
{ id: 3, name: "Notification Settings" },
{ id: 4, name: "Patient Access Requests" },
{ id: 11, name: "Research" }
]
}
export class UserAction {
id: number;
name: string;
}
<select name="userActions" id="userActions" title="Actions">
<option *ngFor="let action of user.userActions" [value]="action">
{{action.name}}</option>
</select>
我不太喜欢更改模型,但即使这样也行不通。
任何 help/direction/guidance 将不胜感激。另外,我只是从 Angular 开始(问题可能很明显),但是如果您发现其他任何明显错误的地方,请告诉我。
谢谢。
将angular变量声明(#foo
)添加到select标签,并将其值与user
一起传递给submituseraction
。
<select #actions name="usersearchactions" id="usersearchactions" title="Actions">
<option value="0">Update User Info</option>
<option value="1">Update Email</option>
<option value="2">Reset Password</option>
<option value="3">Notification Settings</option>
<option value="11">Research</option>
</select>
<button (click)="submituseraction(user, actions.value)" class="btn btn-primary btn-xs" type="submit">GO!</button>
我有一个 Angular 6 组件,它获取一个可观察的用户列表,然后使用 *ngFor 语句显示 table 个用户。每行我都包含一个提交按钮,该按钮调用组件 ts 文件中的一个函数,为该行传入用户。到目前为止,这是按预期工作的。
现在我想向每一行添加一个 select 选项,其中包含用户要执行的操作列表。如何获取正确行的 selected 操作的值?
这是我目前的情况。
-从 http 调用返回的示例 JSON 对象。
[
{
"userId": 1,
"username": "user1",
"firstName": "f1",
"lastName": "l1",
"active": true
},
{
"userId": 2,
"username": "user2",
"firstName": "f2",
"lastName": "l2",
"active": true
}
]
在 component.ts 中,我将 UserSearchModel[] 类型的 属性 订阅到 json 响应,并且还创建了一个供 table 调用的函数。
users$: UserSearchModel[];
submituseraction(user: UserSearchModel) {
console.log(user.userId);
}
这是模型。
export class UserSearchModel {
userId: number;
username: string;
firstName: string;
lastName: string;
active: boolean;
}
在 html 我有以下 tr 用于显示和提交数据。
<tr *ngFor="let user of users$">
<td>{{ user.username}}</td>
<td style="word-break: break-all">{{ user.firstName }}</td>
<td style="word-break: break-all">{{ user.lastName }}</td>
<td>{{ user.active }}</td>
<td class="text-nowrap">
<select name="usersearchactions" id="usersearchactions" title="Actions">
<option value="0">Update User Info</option>
<option value="1">Update Email</option>
<option value="2">Reset Password</option>
<option value="3">Notification Settings</option>
<option value="11">Research</option>
</select>
<button (click)="submituseraction(user)" class="btn btn-primary btn-xs" type="submit">GO!</button>
</td>
</tr>
到目前为止一切都很好。我拉出用户列表并正确显示它们。每行还会有一个下拉列表 select 要对用户执行的操作。我还在我的 submituseraction 方法中获得了正确的用户。我遇到的唯一问题是如何在我的 submituseraction 方法中为该用户获取 selected 操作?我希望有一种简单的方法可以在不做太多更改的情况下获得该值。
我确实尝试更新 UserSearchModel 以包含一个用我的列表填充的新 UserAction[] 并使用 *ngfor 命令显示它,这样我就可以从传递给函数的用户对象中获取它。这不起作用,因为在订阅事件中填充数据后 UserAction[] 未定义。我什至试图将其设置为只读并填充到构造函数中,但没有成功。这两种方式我都以未定义的 UserAction[] 结束,所以现在 select.
中没有填充任何操作 export class UserSearchModel {
userId: number;
username: string;
firstName: string;
lastName: string;
active: boolean;
userActions: UserAction[] = [
{ id: 0, name: "Update User Info" },
{ id: 1, name: "Update Email" },
{ id: 2, name: "Reset Password" },
{ id: 3, name: "Notification Settings" },
{ id: 4, name: "Patient Access Requests" },
{ id: 11, name: "Research" }
]
}
export class UserAction {
id: number;
name: string;
}
<select name="userActions" id="userActions" title="Actions">
<option *ngFor="let action of user.userActions" [value]="action">
{{action.name}}</option>
</select>
我不太喜欢更改模型,但即使这样也行不通。
任何 help/direction/guidance 将不胜感激。另外,我只是从 Angular 开始(问题可能很明显),但是如果您发现其他任何明显错误的地方,请告诉我。
谢谢。
将angular变量声明(#foo
)添加到select标签,并将其值与user
一起传递给submituseraction
。
<select #actions name="usersearchactions" id="usersearchactions" title="Actions">
<option value="0">Update User Info</option>
<option value="1">Update Email</option>
<option value="2">Reset Password</option>
<option value="3">Notification Settings</option>
<option value="11">Research</option>
</select>
<button (click)="submituseraction(user, actions.value)" class="btn btn-primary btn-xs" type="submit">GO!</button>