当 ng-click 在里面时,ng-show 不会更新 div

Ng-show will not update when ng-click is inside div

我有一个带有 ng-show 的 DIV。

  1. 当我 运行 ng-click DIV 之外的元素时,效果很好,我可以隐藏它。

  2. 当我 运行 ng-click DIV 内的元素时,它不起作用。当我 console.log 它时,我可以看到变量 beeing 发生了变化,但是视图不会更新。

  3. 我曾尝试使用 $scope.$apply() 但出现错误并表示它已经 运行ning $apply().

控制器部分:

    $scope.selectedActivity = {
        "dayNr": 0,
        "actNr": 0
    };

    $scope.resetSelectedActivity = function () {
        console.log("SelAct: ", $scope.selectedActivity);
        $scope.selectedActivity.dayNr = -1;
        $scope.selectedActivity.actNr = -1;
        console.log("SelAct: ", $scope.selectedActivity);
    };

    $scope.setSelectedActivity = function (dayNr, actNr) {
        console.log("SelAct: ", $scope.selectedActivity);
        $scope.selectedActivity.dayNr = dayNr;
        $scope.selectedActivity.actNr = actNr;
        console.log("SelAct: ", $scope.selectedActivity);
    };

HTML的部分:

    <div ng-repeat="x in xs">
            <ion-scroll>
                <div ng-repeat="y in ys track by $index">

                    <div ng-click="setSelectedActivity($parent.$index, $index)">
                        <!--THE PROBLEM IS HERE-->
                        <div ng-show="selectedActivity.dayNr == $parent.$index && selectedActivity.actNr == $index">

                            <div>
                                <!--THIS LOGS OUT CORRECT VALUES BUT NG-SHOW IS NOT UPDATED-->
                                <div ng-click="resetSelectedActivity()">
                                    Reset
                                </div>
                            </div>

                        </div>
                        <div>
                            <img src="img/checkButtonOverlay.png" />
                        </div>
                    </div>
                    <!--THIS LOGS OUT CORRECT VALUES AND NG-SHOW _IS_ UPDATED-->
                    <button ng-click="resetSelectedActivity()">reset</button>
                </div>
            </ion-scroll>
        </div>

请注意,由于保密原因,我从代码中删除了很多,但原理应该是一样的。

谢谢!

找到问题了!

我有一个 ng-click 在外面显示 DIV。当我同时单击两个 ng-click 时,它们都被输入了。

所以首先 resetSelectedActivity() 然后在 setSelectedActivity() 中再次设置。

使用以下方法修复它:

<div ng-click="resetSelectedActivity($parent.$index, $index, $event)">
    ...
</div>

和:

$scope.setSelectedActivity = function (dayNr, actNr, event) {
    $scope.selectedActivity.dayNr = dayNr;
    $scope.selectedActivity.actNr = actNr;

    //This cancel the mouseclick
    event.stopPropagation();
};