Javascript $scope变量值在函数中未更改

Javascript $scope变量值在函数中未更改,javascript,angularjs,Javascript,Angularjs,我已将一个范围变量传递给一个函数,在该函数中,我试图更改它,即使该值在函数内部可以访问,但它的值不会更改 这是我的html <div class="console_item" ng-class="dropdwns.assetshow==true?'showdrp':'hidedrp'" ng-click="drpdwn(dropdwns.assetshow)">Asset Type</div> 我尝试了$apply,但它给了我一个错误。有人能帮我吗?谢谢。您只需设置正确

我已将一个范围变量传递给一个函数,在该函数中,我试图更改它,即使该值在函数内部可以访问,但它的值不会更改

这是我的html

<div class="console_item" ng-class="dropdwns.assetshow==true?'showdrp':'hidedrp'" ng-click="drpdwn(dropdwns.assetshow)">Asset Type</div>

我尝试了$apply,但它给了我一个错误。有人能帮我吗?谢谢。

您只需设置正确的变量即可

$scope.dropdwns={assetshow:false};
$scope.drpdwn=function(dat){
    $scope.dropdwns.assetshow = !dat; // Here
    console.log($scope.dropdwns);
};

应将对象传递给函数,而不是其属性:

    <div class="console_item" ng-class="dropdwns.assetshow==true?'showdrp':'hidedrp'" ng-click="drpdwn(dropdwns)">Asset Type</div>

    $scope.drpdwn=function(dat){
    if(dat.assetshow == true)
    {
        dat.assetshow = false;
    }
    else
    {
        dat.assetshow = true;
    }

    //A more simple version dat.assetshow = !dat.assetshow
    console.log($scope.dropdwns);
}

最简短的回答是:

 <div class="console_item" ng-class="{'showdrp':dropdwns.assetshow, 'hidedrp':!dropdwns.assetshow}" ng-click="dropdwns.assetshow = !dropdwns.assetshow">Asset Type</div>

dat是一个局部变量。它不是指针。更改它不会更改原始参数。因此,我必须为每个对象编写单独的函数?不。如果翻转布尔值是您真正想要做的唯一事情,那么最简单的方法就是删除该函数并只执行dropdwns.assetshow=!视图中的dropdwns.assetshow。为什么要更改dat,为什么不直接执行:$scope.dropdwns.asstshow=$scope.dropdwns.asstshow在函数中的位置?您可以在HTML中执行以下操作:ng click=dropdwns.asstshow=!dropdwns.asstshow,如果它比布尔翻转更复杂,那么您可以执行dropdwns.assetshow=drpdwndropdwns.assetshow并从函数返回新值。dropdwns是一个类似assetshow的对象列表。我不能将assetshow=等同于!此外,这是一个小例子,我没有原始代码,所以它不仅仅是真/假
 <div class="console_item" ng-class="{'showdrp':dropdwns.assetshow, 'hidedrp':!dropdwns.assetshow}" ng-click="dropdwns.assetshow = !dropdwns.assetshow">Asset Type</div>