使用行和列值对齐 gridster 项目 angularjs
Align gridster items using row and col values angularjs
我使用 angularjs、kendoui 图表和 angular gridster (https://github.com/ManifestWebDesign/angular-gridster) 创建了一个仪表板。
所以我有一个函数可以添加一个带有如下图表的 gridster :-
// add widget to a dashboard
$scope.addWidget = function () {
// new widget configuration
var newWidget = {
id: $scope.allWidgetData.selectedOption.id,
data_source: {},
config: {
name: $scope.allWidgetData.selectedOption.name,
sizeX: 3,
sizeY: 2,
row: $scope.row,
col: $scope.col
}
};
}
// make api call and save data
我可以将这个对象保存到后端并获取值。我正在为每个图表设置行和列值,如下所示,因为 sizeX 和 sizeY 值恒定为 3 和 2。
- 第一个图表 row:0 和 col:0
- 第二个图表 row:0 和 col:3
- 第三个图表row:2和col:0
- 第四张图表row:2和col:3
我在以下页面上参考并搜索了解决方案:-
所以现在我的 HTML 如下所示,所以我设置了行和列值:-
<div gridster="gridsterOptions" ng-if="isShowing(index)">
<ul>
<li gridster-item="widget" ng-repeat="widget in widgetData.availableOptions" row="widget.config.row" col="widget.config.col" style="overflow:hidden;" >
<div class="box">
// kendo ui chart in div
</li>
</ul>
</div>
我的 gridster 配置如下:-
$scope.gridsterOptions = {
minRows: 2, // the minimum height of the grid, in rows
maxRows: 100,
columns: 6, // the width of the grid, in columns
colWidth: 'auto', // can be an integer or 'auto'. 'auto' uses the pixel width of the element divided by 'columns'
rowHeight: 'match', // can be an integer or 'match'. Match uses the colWidth, giving you square widgets.
margins: [10, 10], // the pixel distance between each widget
defaultSizeX: 3, // the default width of a gridster item, if not specifed
defaultSizeY: 2, // the default height of a gridster item, if not specified
mobileBreakPoint: 600, // if the screen is not wider that this, remove the grid layout and stack the items
swapping: false,
pushing: true,
floating: false,
resizable: {
enabled: true,
start: function(event, uiWidget, $element) {}, // optional callback fired when resize is started,
resize: function (event, uiWidget, $element) {
}, // optional callback fired when item is resized,
stop: function(event, uiWidget, $element) {
} // optional callback fired when item is finished resizing
},
draggable: {
enabled: true, // whether dragging items is supported
handle: '.box-header', // optional selector for resize handle
start: function(event, uiWidget, $element) {}, // optional callback fired when drag is started,
drag: function(event, uiWidget, $element) {}, // optional callback fired when item is moved,
stop: function(event, uiWidget, $element) {
} // optional callback fired when item is finished dragging
}
};
When I get the gridster items from backend they are in random order
and gridster does not align them as per row and col values.
我为你创建了一支工作笔如何做到这一点:https://codepen.io/shnigi/pen/JLVZpK
我遇到了类似的问题,我就是这样解决的。确保您引用的是正确的对象值。当您的 ajax 呼叫准备就绪时,您可能还必须设置位置:
<li ng-repeat="widget in widgets"
class="panel" gridster-item
row="widget.posY"
col="widget.posX"
size-x="widget.width"
size-y="widget.height">
<div class="panel-heading">
<h3 class="panel-title">{{widget.title}}</h3>
</div>
</li>
当您设置小部件位置时,移动断点也是一个问题,然后您可能会有不同的分辨率。所以我在这里所做的是我现在正在使用这个叉子:
https://github.com/arkabide/angular-gridster
我根据分辨率计算列数并打开 "dynamic" 列。
$scope.gridsterOptions = {
resizable: {
enabled: false,
},
floating: true,
pushing: true,
swapping: true,
isMobile: true,
mobileBreakPoint: 768,
columns: getColumns(),
dynamicColumns: true,
minWidthToAddANewColumn: 255,
rowHeight: 400,
draggable: {
enabled: true,
handle: '.panel-heading'
}
};
const getColumns = () => {
const browserWidth = $window.innerWidth;
if (browserWidth < 1300) {
return 3;
} else if (browserWidth < 1500) {
return 4;
} else if (browserWidth < 1700) {
return 5;
}
return 6;
};
如果分辨率发生变化,小部件定位会出现一些问题,但这是目前为止我得到的最佳解决方案。
因此,请确保在使用 promises 分配数据之前加载所有数据。像这样的伪代码:
const loadedWidgets = [];
if (settings) {
const loadAllWidgets = () => new Promise(resolve =>
loadedWidgets.push(widget);
resolve();
}));
const actions = settings.chartsettings.map(loadAllWidgets);
Promise.all(actions).then(() => {
const widgetList = loadedWidgets.map(widget => widget);
$scope.widgets = widgetList;
});
}
我猜你的问题与对象引用有关,或者你没有使用 promises 设置位置。你也可以试试我用的叉子。因为对我而言,此设置有效并且小部件出现在我保存它们的位置。
我使用 angularjs、kendoui 图表和 angular gridster (https://github.com/ManifestWebDesign/angular-gridster) 创建了一个仪表板。
所以我有一个函数可以添加一个带有如下图表的 gridster :-
// add widget to a dashboard
$scope.addWidget = function () {
// new widget configuration
var newWidget = {
id: $scope.allWidgetData.selectedOption.id,
data_source: {},
config: {
name: $scope.allWidgetData.selectedOption.name,
sizeX: 3,
sizeY: 2,
row: $scope.row,
col: $scope.col
}
};
}
// make api call and save data
我可以将这个对象保存到后端并获取值。我正在为每个图表设置行和列值,如下所示,因为 sizeX 和 sizeY 值恒定为 3 和 2。
- 第一个图表 row:0 和 col:0
- 第二个图表 row:0 和 col:3
- 第三个图表row:2和col:0
- 第四张图表row:2和col:3
我在以下页面上参考并搜索了解决方案:-
所以现在我的 HTML 如下所示,所以我设置了行和列值:-
<div gridster="gridsterOptions" ng-if="isShowing(index)">
<ul>
<li gridster-item="widget" ng-repeat="widget in widgetData.availableOptions" row="widget.config.row" col="widget.config.col" style="overflow:hidden;" >
<div class="box">
// kendo ui chart in div
</li>
</ul>
</div>
我的 gridster 配置如下:-
$scope.gridsterOptions = {
minRows: 2, // the minimum height of the grid, in rows
maxRows: 100,
columns: 6, // the width of the grid, in columns
colWidth: 'auto', // can be an integer or 'auto'. 'auto' uses the pixel width of the element divided by 'columns'
rowHeight: 'match', // can be an integer or 'match'. Match uses the colWidth, giving you square widgets.
margins: [10, 10], // the pixel distance between each widget
defaultSizeX: 3, // the default width of a gridster item, if not specifed
defaultSizeY: 2, // the default height of a gridster item, if not specified
mobileBreakPoint: 600, // if the screen is not wider that this, remove the grid layout and stack the items
swapping: false,
pushing: true,
floating: false,
resizable: {
enabled: true,
start: function(event, uiWidget, $element) {}, // optional callback fired when resize is started,
resize: function (event, uiWidget, $element) {
}, // optional callback fired when item is resized,
stop: function(event, uiWidget, $element) {
} // optional callback fired when item is finished resizing
},
draggable: {
enabled: true, // whether dragging items is supported
handle: '.box-header', // optional selector for resize handle
start: function(event, uiWidget, $element) {}, // optional callback fired when drag is started,
drag: function(event, uiWidget, $element) {}, // optional callback fired when item is moved,
stop: function(event, uiWidget, $element) {
} // optional callback fired when item is finished dragging
}
};
When I get the gridster items from backend they are in random order and gridster does not align them as per row and col values.
我为你创建了一支工作笔如何做到这一点:https://codepen.io/shnigi/pen/JLVZpK
我遇到了类似的问题,我就是这样解决的。确保您引用的是正确的对象值。当您的 ajax 呼叫准备就绪时,您可能还必须设置位置:
<li ng-repeat="widget in widgets"
class="panel" gridster-item
row="widget.posY"
col="widget.posX"
size-x="widget.width"
size-y="widget.height">
<div class="panel-heading">
<h3 class="panel-title">{{widget.title}}</h3>
</div>
</li>
当您设置小部件位置时,移动断点也是一个问题,然后您可能会有不同的分辨率。所以我在这里所做的是我现在正在使用这个叉子:
https://github.com/arkabide/angular-gridster
我根据分辨率计算列数并打开 "dynamic" 列。
$scope.gridsterOptions = {
resizable: {
enabled: false,
},
floating: true,
pushing: true,
swapping: true,
isMobile: true,
mobileBreakPoint: 768,
columns: getColumns(),
dynamicColumns: true,
minWidthToAddANewColumn: 255,
rowHeight: 400,
draggable: {
enabled: true,
handle: '.panel-heading'
}
};
const getColumns = () => {
const browserWidth = $window.innerWidth;
if (browserWidth < 1300) {
return 3;
} else if (browserWidth < 1500) {
return 4;
} else if (browserWidth < 1700) {
return 5;
}
return 6;
};
如果分辨率发生变化,小部件定位会出现一些问题,但这是目前为止我得到的最佳解决方案。
因此,请确保在使用 promises 分配数据之前加载所有数据。像这样的伪代码:
const loadedWidgets = [];
if (settings) {
const loadAllWidgets = () => new Promise(resolve =>
loadedWidgets.push(widget);
resolve();
}));
const actions = settings.chartsettings.map(loadAllWidgets);
Promise.all(actions).then(() => {
const widgetList = loadedWidgets.map(widget => widget);
$scope.widgets = widgetList;
});
}
我猜你的问题与对象引用有关,或者你没有使用 promises 设置位置。你也可以试试我用的叉子。因为对我而言,此设置有效并且小部件出现在我保存它们的位置。