У меня есть приложение AngularJS, которое собирает данные из ввода, преобразует модель в строку с помощью JSON.stringify()
и позволяет пользователю редактировать эту модель таким образом, чтобы поля ввода обновлялись при обновлении <textarea>
элемента, и наоборот. Какая-то двусторонняя привязка :)
Проблема в том, что сама строка выглядит некрасиво, и я хотел бы отформатировать ее так, чтобы она выглядела так:
И не так, как сейчас:
Есть идеи, как это можно сделать? Если вам нужна дополнительная информация - не стесняйтесь спрашивать. Мы высоко ценим каждый ответ и немедленно отвечаем на него.
Спасибо.
PS Думаю, это должна быть какая-то директива или кастомный фильтр. Сами данные НЕ ДОЛЖНЫ изменяться, только вывод.
javascript
json
string
angularjs
formatting
аменуар
источник
источник
$watch
(на основе ответа на предыдущий вопрос) по модели textarea, можете ли вы сделать aconsole.log()
и посмотреть, какое значение вы получаете в строке для клавиши ввода - я думаю, что это "/ n"Ответы:
Вы можете использовать необязательный параметр
JSON.stringify()
Например:
JSON.stringify({a:1,b:2,c:{d:3, e:4}},null," ")
даст вам следующий результат:
"{ "a": 1, "b": 2, "c": { "d": 3, "e": 4 } }"
источник
$$hashKey
свойство angular, используемое для внутреннего отслеживания моделиJSON.stringify(object, null, 2)
где 2 - количество пробелов.Angular имеет встроенную функцию
filter
для показаJSON
Обратите внимание на использование
pre
тега -tag для сохранения пробелов и разрывов строкДемо:
angular.module('app', []) .controller('Ctrl', ['$scope', function($scope) { $scope.data = { a: 1, b: 2, c: { d: "3" }, }; } ]);
<!DOCTYPE html> <html ng-app="app"> <head> <script data-require="angular.js@1.2.15" data-semver="1.2.15" src="//code.angularjs.org/1.2.15/angular.js"></script> </head> <body ng-controller="Ctrl"> <pre>{{data | json}}</pre> </body> </html>
Также есть
angular.toJson
метод, но я с ним не играл ( Документы )источник
<pre>
тега не должно быть установленоwhite-space
свойствоnormal
илиno-wrap
. В противном случае ваш JSON не будет иметь желаемый отступ.Если вы хотите отобразить JSON как HTML и его можно свернуть / открыть, вы можете использовать эту директиву, которую я только что сделал, чтобы красиво ее отобразить:
https://github.com/mohsen1/json-formatter/
источник
Помимо уже упомянутого углового
json
фильтра , есть еще угловаяtoJson()
функция .Второй параметр этой функции позволяет включить красивую печать и установить количество используемых пробелов.
источник
Я думаю, вы хотите использовать для редактирования текста json. Тогда вы можете использовать способ Иварни:
и добавьте атрибут adition, чтобыредактируемый
<pre contenteditable="true">{{data | json}}</pre>
Надеюсь, это поможет тебе.
источник
Если вы хотите отформатировать JSON, а также выделить немного синтаксиса, вы можете использовать
ng-prettyjson
директиву. См. Пакет npm.Вот как им пользоваться:
<pre pretty-json="jsonObject"></pre>
источник