2014-09-23 39 views
0

我想检测一个文件点击该页面,并在一个div中操纵一个DOM。我有类似的东西如何在我的情况下操纵一个子元素

angular.module('myApp').directive('documentClick', ['$document', function($document) { 
    return function(scope, element, attrs) { 
     element.bind('click', function(e){ 
      console.log('click') 
     }) 
    } 
}]); 


<body ng-app="myApp" ng-controller="ctrl" document-click> 
    <div ng-controller='insideCtrl'> 
     <div id="test"> 
      <p>inside p</p> 
     </div> 
    </div> 
</body> 

我想在'任何地方点击页面后'内部p'文本更改为别的东西。我该怎么做呢?谢谢。

+0

哪个部位有问题?似乎你应该很容易通过选择'test'来缩小到'p',然后得到它的唯一后代元素。那么这只是更新其文本内容的问题。不知道你到底在问什么。 – 2014-09-23 18:21:34

+0

我想用角度来做。 – FlyingCat 2014-09-23 18:22:17

回答

1

你可以使用事件来做伎俩。

事件由控制器发出,您可以在您的指令中注入的唯一控制器是$rootController。所以,让我们做吧:

// in your directive 
angular.module('...') 
    .directive('documentClick', function ($document, $rootScope) { 
    return function(scope, element, attrs) { 
     element.bind('click', function(e){ 
     $rootScope.$broadcast('documentClicked'); 
     }) 
    } 
    }); 

// in your controller 
angular.module('...') 
    .controller('WhateverCtrl', function ($scope) { 

    $scope.$on('documentClicked', function() { 
     // here it is ! 
    }); 

    }); 

注意,我在控制器中使用$scope,不$rootScope原因也没有必要使用它的广告$broadcast被发送到所有儿童的范围。 See here for more infos

相关问题