Html 当Ng click位于div内时,Ng show不会更新
我和ng秀有个节目Html 当Ng click位于div内时,Ng show不会更新,html,angularjs,angularjs-scope,angularjs-ng-click,ng-show,Html,Angularjs,Angularjs Scope,Angularjs Ng Click,Ng Show,我和ng秀有个节目 当我在DIV之外的元素上运行ng click时,它工作正常,我可以隐藏它 当我在DIV内部的元素上运行ng click时,它不起作用。当I console.log时,我可以看到变量正在更改,但视图不会更新 我尝试使用$scope.$apply(),但它出现错误,并说它已经在运行$apply() 控制器的部件: $scope.selectedActivity = { "dayNr": 0, "actNr": 0 }; $
$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的点击,显示DIV在外面。当我点击时,两次点击都被输入
所以首先重置SelectedActivity(),然后在setSelectedActivity()中再次设置它
使用以下方法修复此问题:
<div ng-click="resetSelectedActivity($parent.$index, $index, $event)">
...
</div>
似乎$apply()会有所帮助,但我不知道在它已经运行时如何运行它。根据ngRepeat创建了一个新的作用域,所以我猜当您更新变量时,它只在childscopeNo中更新。不幸的是,事实并非如此。我试着看看父母和孩子打印了什么,但没有什么区别。我删除了太多的代码。在上一次编辑中,我在帖子中输入了正确的代码。谢谢你的回答。:)@klskl在本例中不是因为原型继承和他共享对象而不是简单属性的事实。看看这个答案:您的
$event
是一个javascript对象,与angular无关。您应该将其命名为事件
。从另一篇堆栈溢出文章中获得代码就不那么令人困惑了,但这是一个很好的观点。我同意。:)这就是问题所在,事件的传播就像你在这把小提琴中看到的:@DeblatonJean-Philippee:在AngularJs中它实际上被称为$event。这是同一个对象,只是获取它的另一种方式:在ng click中,您可以像这样发送$event作为参数,它将获取javascript事件:Test
发现我不需要在ng click中发送$event。它在没有参数的情况下工作。只是event.stopPropagation()代码>
$scope.setSelectedActivity = function (dayNr, actNr, event) {
$scope.selectedActivity.dayNr = dayNr;
$scope.selectedActivity.actNr = actNr;
//This cancel the mouseclick
event.stopPropagation();
};