Я пытаюсь запустить jsfiddle по адресу https://jsfiddle.net/rishi007bansod/f7903drg/160/а> . В этом java-скрипте я беру данные из файла json
, содержащего запись json
. Например, файл содержит следующую запись:
{
"a":5,
"b":2,
"f":
{
"c":"test",
"d":"test_json"
}
}
После прочтения файла я пытаюсь распечатать древовидную структуру записей json
и назначать каждой записи кнопки Add Node
и Delete Node
, чтобы разрешить добавление или удаление узлов.
В коде я инициализировал переменную $scope.tree
значением $scope.tree = [{name: "myTree", nodes: []}];
. Затем я пытаюсь назначить древовидную структуру переменной $scope.tree
после чтения данных из файла. Но переменная $scope.tree
не обновляется (ее значение остается таким же, как мы инициализировали). Таким образом, представление html
не обновляется вместе с этим деревом после чтения данных из файла json. Как я могу обновить это представление?
2 ответа
Проблема в том, что ваша функция для чтения данных файла является асинхронной, но она не уведомляет AngularJS о завершении.
document.getElementById('files').addEventListener('change', handleFileSelect, false);
Только провайдеры angular "синхронизируются" с циклом дайджеста AngularJS ($q
, $http
, $timeout
и т. Д.). Но обычные события старого документа - нет, и они должны сделать дополнительный шаг, чтобы указать AngularJS, что ему нужно запустить другой цикл.
$scope.$apply(function() {
$scope.tree = myTree;
});
Рабочий пример: https://jsfiddle.net/f7903drg/161/
Итак, вы обновляете переменную $scope.tree
вне области жизненного цикла Angular, поэтому вам нужно вызвать $scope.apply
в функции handleFileSelect
, как раз в конце или после присвоения значения.
Проблема с полями ввода типа file
заключается в том, что для добавления onChange вам потребуется написать настраиваемую директиву, потому что ng-change не поддерживается для этих полей.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.