我有一个角度控制器,只要用户点击控制器范围外,就需要重置.我该怎么做呢?
示例html:
<div id='parent'> <div id='1' ng-controller="ctrl1"> <!--other things--> </div> <div id='2' ng-controller="ctrl2"> <!--other things--> </div> </div> <div id="parent2"> <!--other things--> </div>
如果点击发生在div2之外,如果点击发生在ctr2之外,我希望能够重置ctrl2
ctr2内部定义了一个复位功能
解决方法
如果你想在兄弟div中发生单击时想要重置,那么控制器共享$scope的事实应该会相当简单.如果要在页面上的任何其他位置发生单击时重置div,则应将“resetting”div设置为指令,将$window对象绑定到单击处理程序:
app.directive('reset',function($window){ return { template: '<div ng-class="{red: directiveToggler}">I\'m in 2' + ' - click me to turn red,click anywhere else to turn me normal'+ '</div>',controller: function($scope){ $scope.directiveToggler = true; },link: function(scope,element){ var w = angular.element($window); w.bind('click',function(e){ if (e.target != element[0].children[0]){ scope.directiveToggler = false; scope.$apply(); } else { scope.directiveToggler = true; scope.$apply() } }) } } })
请注意,可能有更好的方法来处理类/样式更改比我设置的更好,但问题是关于点击事件;).