Angularjs 将false设置为范围变量不会';从工厂设置时,机器无法工作

Angularjs 将false设置为范围变量不会';从工厂设置时,机器无法工作,angularjs,Angularjs,我有一个导航下拉列表,我想根据工厂的值隐藏下拉列表中的一些选项。我正在使用ng show根据出厂值隐藏或显示的选项 当我在没有工厂的情况下直接将其设置为false时,它会工作,并且在下拉列表中看不到这些选项 以下是我从工厂获取数据的方式: $scope.mstrClientLStatus=userDetailsFactory.getUserDetailsFromFactory().mstrClientLStatus; console.log($scope.mstrClientLStatus)

我有一个导航下拉列表,我想根据工厂的值隐藏下拉列表中的一些选项。我正在使用
ng show
根据出厂值隐藏或显示的选项

当我在没有工厂的情况下直接将其设置为false时,它会工作,并且在下拉列表中看不到这些选项

以下是我从工厂获取数据的方式:

$scope.mstrClientLStatus=userDetailsFactory.getUserDetailsFromFactory().mstrClientLStatus; 
console.log($scope.mstrClientLStatus) 
//it is false but doesn't hide
当我直接将上述设置为
false
时,选项被隐藏

$scope.mstrClientLStatus= false //works and the options are hidden
I
console.log
下一行中的
$scope.mstrClientLStatus
,它为false,但仍在下拉列表中显示选项

html:

<li ng-show="mstrClientLStatus"> //this is what I want to hide

这很奇怪,假设您正在控制器中编写代码,可能是摘要周期的问题,您只需将操作放在超时块中,以使其在摘要周期中注册

  $timeout(function() {
   $scope.mstrClientLStatus = userDetailsFactory.getUserDetailsFromFactory().mstrClientLStatus;
   $scope.$apply()
 })

这很奇怪,假设您正在控制器中编写代码,可能是摘要周期的问题,您只需将操作放在超时块中,以使其在摘要周期中注册

  $timeout(function() {
   $scope.mstrClientLStatus = userDetailsFactory.getUserDetailsFromFactory().mstrClientLStatus;
   $scope.$apply()
 })

我的同事提出了这一建议,尽管这是一个解决办法,但还是奏效了。我认为:

if(userDetailsFactory.getUserDetailsFromFactory().mstrClientLStatus=="true"){
    $scope.mstrClientLStatus= true;
}

我的同事提出了这一建议,尽管这是一个解决办法,但还是奏效了。我认为:

if(userDetailsFactory.getUserDetailsFromFactory().mstrClientLStatus=="true"){
    $scope.mstrClientLStatus= true;
}

在“`$scope.mstrClientLStatus=userDetailsFactory.getUserDetailsFromFactory().mstrClientLStatus”的底部尝试
$scope.$apply()
`我得到这个错误
https://docs.angularjs.org/error/$rootScope/inprog?p0=$digest
你能发布你工厂的代码片段吗?@Siddharth。在“`$scope.mstrClientLStatus=userDetailsFactory.getUserDetailsFromFactory().mstrClientLStatus”的底部发布ittry
$scope.$apply()
`我得到这个错误
https://docs.angularjs.org/error/$rootScope/inprog?p0=$digest
你能发布你工厂的代码片段吗?@Siddharth。我已经发布了一个解决方案,虽然有效,但并不完全正确。你能把它看得很好吗,10/10我发布了一个解决方案,它可以工作,但并不真正正确。你能把它看得很好吗,10/10看。@georgeawg。我认为
ng show
认为
false都是
false
只有空字符串
是false。字符串
“false”
“true”
都是真实的。事实上,任何长度大于零的字符串都是真实的。这是JavaScript的一个怪癖。有关详细信息,请参阅和。请参阅。@georgeawg。我认为
ng show
认为
false都是
false
只有空字符串
是false。字符串
“false”
“true”
都是真实的。事实上,任何长度大于零的字符串都是真实的。这是JavaScript的一个怪癖。有关详细信息,请参阅和。