当 ng-click 在里面时,ng-show 不会更新 div
Ng-show will not update when ng-click is inside div
我有一个带有 ng-show 的 DIV。
当我 运行 ng-click DIV 之外的元素时,效果很好,我可以隐藏它。
当我 运行 ng-click DIV 内的元素时,它不起作用。当我 console.log 它时,我可以看到变量 beeing 发生了变化,但是视图不会更新。
我曾尝试使用 $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();
};
我有一个带有 ng-show 的 DIV。
当我 运行 ng-click DIV 之外的元素时,效果很好,我可以隐藏它。
当我 运行 ng-click DIV 内的元素时,它不起作用。当我 console.log 它时,我可以看到变量 beeing 发生了变化,但是视图不会更新。
我曾尝试使用 $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();
};