Je veux créer une zone de texte correspondante avec un handstontable, de sorte que la modification de la table a un impact sur le texte, et vice-versa. Voici un JSBin.de déclenchement du cycle condensé dans les événements de rappel
<!DOCTYPE html>
<html>
<head>
<script src="https://handsontable.github.io/ngHandsontable/node_modules/angular/angular.js"></script>
<script src="https://docs.handsontable.com/pro/1.8.2/bower_components/handsontable-pro/dist/handsontable.full.js"></script>
<link type="text/css" rel="stylesheet" href="https://docs.handsontable.com/pro/1.8.2/bower_components/handsontable-pro/dist/handsontable.full.min.css">
<script src="https://handsontable.github.io/ngHandsontable/dist/ngHandsontable.js"></script>
</head>
<body ng-app="app">
<div ng-controller="Ctrl">
<hot-table settings="settings" on-after-create-row="onAfterCreateRow" datarows="dataJson"></hot-table>
<br><br>
<textarea cols=40 rows=20 ng-model="dataString"></textarea>
</div>
<script>
var app = angular.module('app', ['ngHandsontable']);
app.controller('Ctrl', ['$scope', '$filter', 'hotRegisterer', function ($scope, $filter, hotRegisterer) {
$scope.dataJson = [[5, 6], [7, 8]];
$scope.onAfterCreateRow = function (index, amount) {
$scope.$digest();
};
$scope.$watch('dataJson', function (dataJson_new) {
$scope.dataString = $filter('json')(dataJson_new);
}, true);
$scope.$watch('dataString', function (dataString_new) {
try {
$scope.dataJson = JSON.parse(dataString_new);
} catch (e) {
}
}, true);
$scope.settings = {
contextMenu: true,
contextMenuCopyPaste: {
swfPath: 'zeroclipboard/dist/ZeroClipboard.swf'
}
};
}]);
</script>
</body>
</html>
Cependant, une chose que je me rends compte que, en ajoutant/suppression de lignes/colonnes ne se déclenche pas le veilleur de dataJSON
(alors que la modification d'une valeur de la cellule fera). Je dois donc utiliser $scope.$digest()
dans les callbacks tels que onAfterCreateRow
pour refléter le changement de l'ajout de lignes. Mais elle soulève Uncaught TypeError: Cannot set property 'forceFullRender' of null
:
Ayant $scope.$digest()
dans d'autres callbacks (à savoir, onAfterCreateCol
, onAfterRemoveRow
et onAfterRemoveCol
) soulèvera la même erreur. Je pense que c'est un problème sérieux, si nous ne pouvons pas déclencher le cycle digest dans ces événements de rappel. Est-ce que quelqu'un sait comment résoudre cela ou avoir une solution de contournement?
en effet, '$ scope. $ applyAsync()' fonctionne. Et '$ scope. $ EvalAsync()' fonctionne aussi bien. –