嵌套在指令元素中的 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 在这种情况下不起作用?
有什么想法吗?
您需要解决 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:hidden
在 uib-collapse
元素上。
<div uib-collapse="isCollapsed" style="overflow: hidden;">
当父级高度为 0 时内容仍然显示
当我单击 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 在这种情况下不起作用?
有什么想法吗?
您需要解决 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:hidden
在 uib-collapse
元素上。
<div uib-collapse="isCollapsed" style="overflow: hidden;">
当父级高度为 0 时内容仍然显示