以下是我从点击中获取范围的方法。是否有更简单的方法来获得儿童范围?感谢。
.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;
}
我试图在详细模式下打开聊天消息时尝试添加活动类。
答案 0 :(得分:0)
在子范围上,将事件发送到其父范围
$scope.$emit('event name', {param: value});
并在您的父范围内侦听并处理事件
$scope.$on('event name', function (params){});
答案 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;
}