2 回答

TA貢獻1828條經驗 獲得超6個贊
如果我理解正確的話,你想設置this.options['enableEmptyCellDrag']
為 的值@Input() editing
。
你想讓 gridster2(我必須承認我不知道這是什么)認識到這個變化。
所以你有兩個問題:
當您處于 時
ngOnChanges
,@Input()
直接訪問您將為您提供“舊”值。通常,為了讓 Angular 檢測對象的變化,您需要更改對象的引用。
這就是你ngOnChanges
應該的樣子。
ngOnChanges(changes: SimpleChanges) {
if (changes.editing && changes.editing.currentValue) {
// Solve problem 1)
const newValueOfEditingInput = changes.editing.currentValue;
// Solve Problem 2) - Create a new reference for this.options, so that angular (grister2) can detect the change
this.options = {
...this.options,
enableEmptyCellDrag: newValueOfEditingInput
};
}
}
當然我還沒有測試過,但希望對你有幫助

TA貢獻1995條經驗 獲得超2個贊
恕我直言,我找到了一個更優雅的解決方案。
GridsterConfig 對象有一個 api.optionsChanged 子對象,它是一個函數。如果你運行它,它也會告訴 Gridster 選項發生變化,而不必本質上重新實例化對象(無論如何,它可能只是運行這個函數)??雌饋砀踩?、更優雅。
因此,您的更改現在可以如下所示:
ngOnChanges(changes: SimpleChanges) {
if (changes.editing && changes.editing.currentValue) {
this.options.enableEmptyCellDrag = changes.editing.currentValue;
this.options.api.optionsChanged();
}
}
我還建議創建一個如下所示的類,這將防止您被迫檢查這些選項是否存在(if 語句只是檢查是否定義了 GridsterConfig 接口可選選項...所以如果您定義了它們提前沒有必要這樣做...不知道為什么 Gridster 使存在可選...恕我直言,選項應該始終存在,但可以設置為 null 或默認值)。
export class DashboardOptions implements GridsterConfig{
gridType = GridType.Fit;
compactType = CompactType.None;
margin = 10;
outerMargin = false;
outerMarginTop = null;
outerMarginRight = null;
outerMarginBottom = null;
outerMarginLeft = null;
useTransformPositioning = true;
mobileBreakpoint = 720;
minCols = 1;
maxCols = 100;
minRows = 1;
maxRows = 100;
maxItemCols = 100;
minItemCols = 1;
maxItemRows = 100;
minItemRows = 1;
maxItemArea = 2500;
minItemArea = 1;
defaultItemCols = 1;
defaultItemRows = 1;
fixedColWidth = 105;
fixedRowHeight = 105;
keepFixedHeightInMobile = false;
keepFixedWidthInMobile = false;
scrollSensitivity = 10;
scrollSpeed = 20;
enableEmptyCellClick = false;
enableEmptyCellContextMenu = false;
enableEmptyCellDrop = false;
enableEmptyCellDrag = false;
enableOccupiedCellDrop = false;
emptyCellDragMaxCols = 50;
emptyCellDragMaxRows = 50;
ignoreMarginInRow = false;
public draggable = {
enabled: false,
delayStart: 200,
start: () => {},
stop: () => {}
};
public resizable = {
enabled: true,
delayStart: 200,
start: () => {},
stop: () => {}
};
swap = false;
pushItems = true;
disablePushOnDrag = false;
disablePushOnResize = false;
pushDirections = {north: true, east: true, south: true, west: true};
pushResizeItems = false;
displayGrid = DisplayGrid.Always;
disableWindowResize = false;
disableWarnings = false;
scrollToNewItems = false;
api = {
resize: () => {},
optionsChanged: () => {},
};
itemChangeCallback = (item: GridsterItem, itemComponent: GridsterItemComponentInterface) => {};
}
然后,您的更改現在可以如下所示:
ngOnChanges(changes: SimpleChanges) {
this.options.enableEmptyCellDrag = changes.editing.currentValue;
this.options.api.optionsChanged();
}
添加回答
舉報