angularjs从被点击的元素中获取当前范围

时间:2014-05-07 13:16:35

标签: 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.currentTarget).scope()
    if (childScope.detailed) {
      childScope.detailed = false
      return
    }

    childScope.detailed = true;
  }

我试图在详细模式下打开聊天消息时尝试添加活动类。

3 个答案:

答案 0 :(得分:0)

在子范围上,将事件发送到其父范围

$scope.$emit('event name', {param: value});

并在您的父范围内侦听并处理事件

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

documentation

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

为什么你没有这样做:

.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;
  }