2014-09-23 37 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

相關問題