AngularJS布尔函数不影响ng-show

时间:2017-01-27 21:00:08

标签: html angularjs boolean

我有两个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调用一个函数,该函数获取结果并使用该结果调用另一个函数,该函数返回一个布尔值,第一个函数返回第二个函数的结果。现在我把它写出来了,我意识到这是多么愚蠢,因为没有必要添加第二个功能。

感谢大家的帮助!

4 个答案:

答案 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中。

感谢大家的帮助!