Javascript angularjs从单击的元素获取当前范围

Javascript angularjs从单击的元素获取当前范围,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,下面是我如何通过单击获取范围。是否有更简单的方法获取子范围?谢谢 .chatMsg(ng-repeat='chatMsg in chatLog', ng-class="{active: detailed}", ng-click="openChatDetail($event)") .text {{chatMsg.foo}} $scope.openChatDetail = function(e) { var childScope = angular.element(e.cu

下面是我如何通过单击获取范围。是否有更简单的方法获取子范围?谢谢

 .chatMsg(ng-repeat='chatMsg in chatLog', ng-class="{active: detailed}",  ng-click="openChatDetail($event)")
    .text {{chatMsg.foo}}

  $scope.openChatDetail = function(e) {
    var childScope = angular.element(e.currentTarget).scope()
    if (childScope.detailed) {
      childScope.detailed = false
      return
    }

    childScope.detailed = true;
  }

当聊天消息以详细模式打开时,我正在尝试向其添加活动类。

在子作用域上,将事件发送到其父作用域

在父作用域上侦听并处理事件

$scope.$on('event name', function (params){});

如果我理解得很好,
chatMsg
是一个指令。这意味着您可以在指令的控制器中指定
openchatdeail
方法,其中作用域将是指令的作用域

yourApp.directive('chatMsg', [
    function(){
        return {
            ...,
            scope: true, /* or even better, isolated scope */
            controller: function(scope, elem, attrs) {
                scope.openChatDetail = function() {
                     ...
                }  
            }
        }
    }
])

为什么您没有这样做:

.chatMsg(ng-repeat='chatMsg in chatLog', ng-class="{true: 'active'}[chatMsg.detailed]",  ng-click="openChatDetail(chatMsg)") .text {{chatMsg.foo}}
在您的控制器中

 $scope.openChatDetail = function(item) {
      item.detailed =  !(item.detailed) || true;
  }

请提供更多关于您尝试执行的操作的信息,因为跨越作用域将阻碍您对控制器进行单元测试的能力。可能有更好的方法,而不是直接访问子作用域。@Brocco你说得对,很抱歉我添加了这些信息。
 $scope.openChatDetail = function(item) {
      item.detailed =  !(item.detailed) || true;
  }