javascript - _.findwhere 在选择选项上不适用于 ng-repeat
问题描述
我有以下下拉代码
<select data-role="listview" class="form-control" id="txtUserRole" name="Role" data-ng-model="AddEditUserCtrl.SelectedRoleId" required="required"
data-ng-disabled="!($root.UserSchoolPermissions.indexOf('User.ChangeRole') > -1) && AddEditUserCtrl.isInEditMode"
data-ng-change="AddEditUserCtrl.roleChanged(AddEditUserCtrl.SelectedRoleId)"
data-ng-class="{'border-error': AddEditUserCtrl.userForm.Role.$invalid && AddEditUserCtrl.userForm.Role.$error.required && (!AddEditUserCtrl.userForm.Role.$pristine || submitted)}">
<option value="" selected class="text-muted">{{'Role' | translate}}</option>
<option data-ng-repeat="option in AddEditUserCtrl.roles" value="{{option.RoleId}}" title="{{option.RoleName}}" data-ng-selected="{{AddEditUserCtrl.SelectedRoleId == option.RoleId}}">{{option.RoleName | translate}}</option>
</select>
我想要做的是AddEditUserCtrl.SelectedRoleId
从 ng-model 获取并将其传递给 ng-change 函数以使用 _.findwhere 使用下面的 JS 代码获取角色对象
AddEditUserCtrl.roleChanged = function (roleId) {
var selectedrole = _.findWhere(AddEditUserCtrl.roles, {
RoleId: roleId
});
AddEditUserCtrl.user.Role = selectedrole
}
调试后我发现它roleId
是从 html 传递的,并且AddEditUserCtrl.roles
数组包含匹配的对象,roleId
但它不起作用。
检查以下屏幕截图以了解我的调试 PS:我尝试使用 data-ng-options 制作选择标签并且它有效,但我需要在选项标签上使用 data-neg-repeat
解决方案
根据您的屏幕截图,您似乎正在尝试比较字符串和数字。roleId
被传递给findWhere()
看起来是一个字符串,但RoleId
您尝试匹配的属性是一个数字,这就是为什么没有匹配的原因。尝试以下操作,将一元加运算符roleId
添加到来自 HTML 的字符串以转换为数字:
var selectedrole = _.findWhere(AddEditUserCtrl.roles, {
RoleId: +roleId
});
您还可以使用Number(roleId)
orparseInt(roleId, 10)
将字符串转换为数字。
var roles = [
{ RoleId: 1, RoleName: "Teacher" },
{ RoleId: 2, RoleName: "Student" },
{ RoleId: 9, RoleName: "Foo" }
];
function roleChanged(roleId) {
var selectedRole = _.findWhere(roles, {
RoleId: +roleId
});
console.log(selectedRole);
}
roleChanged("9");
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore.js"></script>
希望这会有所帮助!
推荐阅读
- sql - 在 SQL 中转换数据,将行拆分为列
- postgresql - Npgsql Entity Framework Core PostgreSQL 全文搜索按部分词
- css - css 模块文件正在加载,但样式不起作用
- c# - 打开pdf文件时出现Win32Exception
- render - 使用 tmux 调整大小时 Nvim 呈现错误
- javascript - 如何使用 log4js 向记录器添加/修改颜色?
- php - 无法在 laravel 8 中显示图像
- javascript - 用于 websockets 内部的 Chrome DevTools 网络工具
- r - 有没有办法在闪亮的输入小部件标签中获得数学符号?
- mod-rewrite - 代理 mod_rewrite Apache 中的请求时,静态文件也不提供服务