在angularjs中使用json pretty print

aug*_*0co 53 angularjs

我如何在angularJS中使用这个json pretty print [ http://jsfiddle.net/KJQ9K/ ]?

让我们假设myJsonValue是

{a:1, 'b':'foo', c:[false,'false',null, 'null', {d:{e:1.3e5,f:'1.3e5'}}]}
Run Code Online (Sandbox Code Playgroud)

我希望能够使用下面的渲染预(如示例所示)

Mic*_*ole 117

Angular已经内置json过滤器:

<pre>
  {{data | json}}
</pre>
Run Code Online (Sandbox Code Playgroud)

json管道之后|角度滤波器.如果您愿意,可以制作自己的自定义过滤器:

app.filter('prettyJSON', function () {
    function prettyPrintJson(json) {
      return JSON ? JSON.stringify(json, null, '  ') : 'your browser doesnt support JSON so cant pretty print';
    }
    return prettyPrintJson;
});
Run Code Online (Sandbox Code Playgroud)

要使用自定义prettyJSON过滤器:

  <pre>
    {{data | prettyJSON}}
  </pre>
Run Code Online (Sandbox Code Playgroud)

来自@TeChn4K的ES6版本:

app.filter("prettyJSON", () => json => JSON.stringify(json, null, " "))
Run Code Online (Sandbox Code Playgroud)

  • 记得使用`<pre>`标签.这很棒! (5认同)
  • 最佳答案.使用es6语法的一行:`app.filter("prettyJSON",()=> json => JSON.stringify(json,null,""))` (4认同)

Ant*_*Chu 17

另一个选择是将功能转换为过滤器...

app.filter('prettify', function () {

    function syntaxHighlight(json) {
        // ...
    }

    return syntaxHighlight;
});
Run Code Online (Sandbox Code Playgroud)

HTML ...

<pre ng-bind-html="json | prettify"></pre>
Run Code Online (Sandbox Code Playgroud)

JsFiddle:http://jsfiddle.net/KSTe8/


chr*_*cpn 7

一个更简单的代码:

app.filter('prettyJSON', function () {
    return function(json) { return angular.toJson(json, true); }
});
Run Code Online (Sandbox Code Playgroud)

记得使用<pre>标签


Jef*_*ser 0

你有几个选择。我认为最“AngularJS”的方法是将自定义对象包装到 Angular 服务中:

myAngularModule.service('myPrettyPrintService', ,myObject );
Run Code Online (Sandbox Code Playgroud)

将其注入控制器:

myAngularModule.controller('myTestController', function(myPrettyPrintService){}
Run Code Online (Sandbox Code Playgroud)

然后在控制器内部,引用函数并排序:

myPrettyPrintService.syntaxHighlight();
Run Code Online (Sandbox Code Playgroud)

由于 JavaScript 中定义的任何内容都是全局的,从技术上讲,您可以在控制器内访问它:

syntaxHighlight();
Run Code Online (Sandbox Code Playgroud)

这可能会搞砸单元测试,因为它向控制器添加了外部的、未定义的依赖项。