我有两个div:
<div ng-show="!function(necessaryPrivilege)">Need privilege</div>
<div ng-show="function(necessaryPrivilege)">Have privilege</div>
和我正在测试的两个用户:
User1:有必要的特权 User2:没有必要的特权
我已经在我的函数中的各个点放置了console.log以确保它返回正确的值,但是对于两个用户它都显示了&#34; Need privileges&#34; DIV。有谁知道为什么会这样做?我知道user1函数返回true,而user2返回false。
编辑,功能:
$scope.getReqPriv = function(page, section, action) //this is the function called by ng-show
{
//TO-DO
for(var i = 0; i < $scope.elemPrivs.length; i++)
{
console.log("Priv Array");
console.log($scope.elemPrivs["elementPrivilegesJSON"]);
}
angular.forEach($scope.elemPrivs, function(data, name)
{
if(name === page)
{
console.log(name === page);
angular.forEach(data[0], function(data1, name1)
{
if(name1 === section)
{
console.log(name1 === section);
angular.forEach(data1, function(data2, name2)
{
if(name2 === action)
{
console.log(name2 === action); //printing true for user1
return $scope.checkPrivileges(data2);
}
});
}
});
}
});
}
$scope.checkPrivileges = function(reqPriv)
{
console.log("CHECK YOUR PRIVILEGE!");
for(var i = 0; i < $scope.userPrivs.length; i++)
{
if(reqPriv === $scope.userPrivs[i])
{
console.log(reqPriv === $scope.userPrivs[i]);
}
if(reqPriv === $scope.userPrivs[i])
{
console.log("YOU HAVE PRIVILEGE!"); //this is printing for user1
return true;
}
}
return false;
}
不幸的是,这是我能给你的最好的。其余的是我的雇主所有,但我可以100%向您保证数据是正确的。当它到达dom元素中的ng-show时会出现问题。
更新:
所以我厌倦了尝试调试这么复杂的混乱,而是做了这个:
<div ng-show="!checkPrivs()">Need privilege</div>
<div ng-show="checkPrivs()">Have privilege</div>
其中
$scope.checkPrivs - function()
{
return true;
}
我刚刚改为真实,反之亦然....它仍然没有改变div标签中的ng-show。 JS和DOM之间肯定发生了一些事情。我确保该函数在javascript文件中位于我的控制器中,并确保DOM元素位于HTML文件的控制器中。
最终更新,它已被修复:
是的,我已经在我之前的更新中意识到我把...&#34; - function()&#34;相反&#34; =功能&#34;,因此它为什么不起作用。现在,解决方案:
它拒绝使用嵌套函数!如果您注意到ng-show调用一个函数,该函数获取结果并使用该结果调用另一个函数,该函数返回一个布尔值,第一个函数返回第二个函数的结果。现在我把它写出来了,我意识到这是多么愚蠢,因为没有必要添加第二个功能。
感谢大家的帮助!
答案 0 :(得分:0)
使用ng-show,您应该使用范围变量而不是方法,并在控制器方法中设置变量。
答案 1 :(得分:0)
根据我的经验,当我无法从验证器方法返回布尔值时,我遇到了这样的情况。你能否确保该函数返回true / false而不是&#39; true&#39; /&#39; false&#39;
答案 2 :(得分:0)
一些观察结果:
ng-show
内正确。而不是使用function(necessaryPrivilege)
使用此checkPrivileges(necessaryPrivilege)
。工作演示:
var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl',function($scope) {
$scope.checkPrivileges = function(necessaryPrivilege) {
// add functionality here
return true;
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
<div ng-show="!checkPrivileges(necessaryPrivilege)">Need privilege</div>
<div ng-show="checkPrivileges(necessaryPrivilege)">Have privilege</div>
</div>
答案 3 :(得分:0)
它拒绝使用嵌套函数!如果您注意到ng-show调用一个函数,该函数获取结果并使用该结果调用另一个函数,该函数返回一个布尔值,第一个函数返回第二个函数的结果。现在我把它写出来了,我意识到这是多么愚蠢,因为没有必要添加第二个功能。
所以基本上我把第二个功能合并到第一个功能和bada-boom中。
感谢大家的帮助!