Javascript 使用AngularJS,我如何利用ng show来查找数组中的某些值?
我有一个模型,Javascript 使用AngularJS,我如何利用ng show来查找数组中的某些值?,javascript,json,angularjs,angularjs-directive,meanjs,Javascript,Json,Angularjs,Angularjs Directive,Meanjs,我有一个模型,程序,看起来像这样 var ProgramSchema = new Schema({ permissions: [{ user: { type: Schema.ObjectId, ref: 'User' }, roles: { type: [{ type: String, enum: ['reader', 'editor', 'admin', 'r
程序
,看起来像这样
var ProgramSchema = new Schema({
permissions: [{
user: {
type: Schema.ObjectId,
ref: 'User'
},
roles: {
type: [{
type: String,
enum: ['reader', 'editor', 'admin', 'requested']
}]
}
}],
type: {
type: String,
enum: ['public', 'private'],
default: 'public',
required: 'Type cannot be blank'
}
});
在页面上显示程序列表时,如果当前经过身份验证的用户$scope.authentication.user
位于程序.permissions.user
中,并且具有reader、editor或admin角色,我希望显示一个图标。
我在考虑一个ng show
,但是由于programs.permissions
是一个数组,我无法让它工作。
任何帮助都会很好!谢谢
样本程序
数据
{
"_id" : ObjectId("55ab4acd24640cd55097c356"),
"permissions" : [
{
"user" : ObjectId("55a897dfad783baa677e1326"),
"roles" : [
"reader"
]
},
{
"user" : ObjectId("5563f65a84426d913ae8334e"),
"roles" : [
"editor"
]
}
]
}
通过一些帮助,我终于做到了
我在ng show中调用了一个函数
ng-show="userFollowedProgram(program)"
ng-show="userFollowedProgram(program)"
在我的控制器中
$scope.userFollowedProgram = function(program) {
//loop thru permissions and see if user is in there.
for (var i = 0; i < program.permissions.length; i++) {
if (program.permissions[i].user === $scope.authentication.user._id) {
//loop thru roles and see if user is following.
if (program.permissions[i].roles.indexOf('admin') > -1 ||
program.permissions[i].roles.indexOf('editor') > -1 ||
program.permissions[i].roles.indexOf('reader') > -1) {
return true
}
}
}
return false;
};
$scope.userFollowedProgram = function(program) {
for (var i = 0; i < program.permissions.length; i++) {
if (program.permissions[i].user === $scope.authentication.user._id) {
return true;
}
}
return false;
};
$scope.userfollowdprogram=函数(程序){
//循环访问权限并查看用户是否在其中。
for(var i=0;i-1||
program.permissions[i].roles.indexOf('editor')>-1||
program.permissions[i].roles.indexOf('reader')>-1){
返回真值
}
}
}
返回false;
};
虽然不是最漂亮的,但可以使用ng show
上的|
逻辑运算符显式检查值。我模拟了一个简单的例子,使用
作为“图标”-但您当然可以从这里将想法转化为您的工作副本。注意以下几点
<li ng-repeat="user in users">
<span>{{ user.name }}</span>
<span class="ico"
ng-show="user.roles.indexOf('reader') > -1 || user.roles.indexOf('editor') > -1 || user.roles.indexOf('admin') >-1">icon
</span>
</li>
-简单演示
您可以完成的另一个有趣的方法包括通过regex测试他们的角色并返回真实值。可能会比它的价值更高的开销,但如果您愿意,请查看它
<span class="ico" ng-show="isInRole(user)" >icon</span>
-regex演示版我能够理解它
我在我的ng show中调用了一个函数
在我的控制器中
$scope.userFollowedProgram = function(program) {
//loop thru permissions and see if user is in there.
for (var i = 0; i < program.permissions.length; i++) {
if (program.permissions[i].user === $scope.authentication.user._id) {
//loop thru roles and see if user is following.
if (program.permissions[i].roles.indexOf('admin') > -1 ||
program.permissions[i].roles.indexOf('editor') > -1 ||
program.permissions[i].roles.indexOf('reader') > -1) {
return true
}
}
}
return false;
};
$scope.userFollowedProgram = function(program) {
for (var i = 0; i < program.permissions.length; i++) {
if (program.permissions[i].user === $scope.authentication.user._id) {
return true;
}
}
return false;
};
$scope.userfollowdprogram=函数(程序){
for(var i=0;i
谢谢@scniro。不幸的是,它有点复杂,除非我完全没有抓住要点。在程序
文档中,它包含一个权限数组,其中包括对用户
的引用和它拥有的角色数组。我已经更新了问题,以显示示例数据。@scniro您认为这个实现怎么样。我完成了工作,但感觉有点暴力。再次感谢你的帮助!我在这里看不到任何角色。难道我的例子不能让你走上正确的方向吗?当然,这是一个简化的演示-但我认为围绕您的语法工作是非常简单的