嵌套在指令元素中的 uibCollapse 将不起作用,

uibCollapse nested in an directive element won't work,

当我单击 my-dir 时,折叠的元素不会展开。 我在 css 中为 .btn class 设置了大小,以确保实际点击事件。

// index.html

<body ng-controller="ctrl">
    <p>{{hello}}</p>
    <div class="btn" my-dir></div>
</body>

// app.js

var app = angular.module('app', ['ui.bootstrap']);

app.controller('ctrl', function($scope){
    $scope.hello = 'hello';
});

app.directive('myDir', function() {
    return {
        restrict: 'A',
        replace: false,
        templateUrl: './tmpl.html',
        link: function (scope, element, attrs) {
          scope.isCollapsed = true;
          element.bind('click', function (e) {
            scope.isCollapsed = !scope.isCollapsed;
          })
        }
    };
});

// tmpl.html

<div class="dir-box">
    <div uib-collapse="isCollapsed">
        <p>Hello World!</p>
        <p>Nice to meet You!</p>
        <p>: )</p>
    </div>
</div>

为什么 uibCollapse 在这种情况下不起作用?

有什么想法吗?

plunker here

您需要解决 2 件事:

1.Change click 绑定到 ng-click。默认情况下 angular 不会 运行 其 $digest 循环 jquery 事件。您可以通过在代码中添加 $scope.$apply()$timeout 来解决此问题,但我建议使用 ng-click 作为更合适的方法。

<div class="btn" my-dir ng-click="isCollapsed = !isCollapsed"></div>

根据你的原始代码,我应该将它添加到你的指令模板中,但是你的 dir-box 位置没有与蓝色区域重叠...

2.Use overflow:hiddenuib-collapse 元素上。

<div uib-collapse="isCollapsed" style="overflow: hidden;">

当父级高度为 0 时内容仍然显示

plunker