【发布时间】:2013-08-21 22:04:11
【问题描述】:
我的网站将有多个部分,我打算调整每个部分的大小。为此,我制作了一个“可调整大小”的指令,例如:
<div class="workspace" resize="full" ng-style="resizeStyle()">
<div class="leftcol" resize="left" ng-style="resizeStyle()">
使用如下所示的指令:
lwpApp.directive('resize', function ($window) {
return {
scope: {},
link: function (scope, element, attrs) {
scope.getWinDim = function () {
return {
'height': window.height(),
'width': window.width()
};
};
// Get window dimensions when they change and return new element dimensions
// based on attribute
scope.$watch(scope.getWinDim, function (newValue, oldValue) {
scope.resizeStyle = function () {
switch (attrs.resize) {
case 'full':
return {
'height': newValue.height,
'width': (newValue.width - dashboardwidth)
};
case 'left':
return {
'height': newValue.height,
'width': (newValue.width - dashboardwidth - rightcolwidth)
};
etc...
};
}, true);
//apply size change on window resize
window.bind('resize', function () {
scope.$apply(scope.resizeStyle);
});
}
};
});
如您所见,这只在窗口调整大小时调整每个 div 的大小,并且每个指令都有一个隔离范围。这适用于它的构建目标,但最终我想通过一个可拖动的栏来调整 div 的子集。比如
div1 div2
----------------
| || |
| || |
| || |
| || |
----------------
draggable bar in middle
在可拖动条的移动(水平方向)上,我可能需要通过父控制器的范围访问 div1、div2 的宽度(?)。我的问题是:
这是在 Angular 中制作可调整大小的 div 的“正确”方法吗?特别是当一个 div 的大小影响另一个时?
我个人认为 (1) 的答案是“不,我没有正确执行它,因为当每个指令都有一个隔离范围时,我无法在指令之间进行通信。”如果这是真的,我该如何考虑 div 之间的窗口和可拖动大小调整?
【问题讨论】:
-
我没有明确的答案,但我会检查 BootstrapUI Accordion 或类似的东西,其中有一个使用其他指令的主指令并在它们之间“传达”适当的信息打开和关闭相应的部分。我相信您将使用指令定义对象的 require 属性,请参阅此处的长版本 docs.angularjs.org/guide/directive
-
谢谢!我认为您的要求可能是正确的。这将使我可以访问另一个控制器...
-
我一直在尝试这个。正如 jayflo 建议的那样,我尝试了 jQuery-Splitter,但我对此感到很苦恼,并且也得到了代码不受支持的印象。我再次尝试使用JQueryUI resizable,效果很好。下一步是与Angular集成,我将使用AngularJS-JQueryUI
标签: angularjs controller resize scope directive