mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-01-12 22:45:52 +08:00
feat(jsonFilter): add optional arg to define custom indentation
also change toJson function to accomodate passing in of number of spaces Closes #9771
This commit is contained in:
committed by
Caitlin Potter
parent
c8c9bbc412
commit
1191edba4e
@@ -964,12 +964,13 @@ function toJsonReplacer(key, value) {
|
||||
* stripped since angular uses this notation internally.
|
||||
*
|
||||
* @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
|
||||
* @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.
|
||||
* @param {boolean|number=} pretty If set to true, the JSON output will contain newlines and whitespace.
|
||||
* If set to an integer, the JSON output will contain that many spaces per indentation (the default is 2).
|
||||
* @returns {string|undefined} JSON-ified string representing `obj`.
|
||||
*/
|
||||
function toJson(obj, pretty) {
|
||||
if (typeof obj === 'undefined') return undefined;
|
||||
return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null);
|
||||
return JSON.stringify(obj, toJsonReplacer, pretty === true ? 2 : pretty);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -501,25 +501,31 @@ function dateFilter($locale) {
|
||||
* the binding is automatically converted to JSON.
|
||||
*
|
||||
* @param {*} object Any JavaScript object (including arrays and primitive types) to filter.
|
||||
* @param {number=} spacing The number of spaces to use per indentation, defaults to 2.
|
||||
* @returns {string} JSON string.
|
||||
*
|
||||
*
|
||||
* @example
|
||||
<example>
|
||||
<file name="index.html">
|
||||
<pre>{{ {'name':'value'} | json }}</pre>
|
||||
<pre id="default-spacing">{{ {'name':'value'} | json }}</pre>
|
||||
<pre id="custom-spacing">{{ {'name':'value'} | json:4 }}</pre>
|
||||
</file>
|
||||
<file name="protractor.js" type="protractor">
|
||||
it('should jsonify filtered objects', function() {
|
||||
expect(element(by.binding("{'name':'value'}")).getText()).toMatch(/\{\n "name": ?"value"\n}/);
|
||||
expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/);
|
||||
expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/);
|
||||
});
|
||||
</file>
|
||||
</example>
|
||||
*
|
||||
*/
|
||||
function jsonFilter() {
|
||||
return function(object) {
|
||||
return toJson(object, true);
|
||||
return function(object, spacing) {
|
||||
if (isUndefined(spacing)) {
|
||||
spacing = 2;
|
||||
}
|
||||
return toJson(object, spacing);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -210,6 +210,9 @@ describe('filters', function() {
|
||||
it('should do basic filter', function() {
|
||||
expect(filter('json')({a:"b"})).toEqual(toJson({a:"b"}, true));
|
||||
});
|
||||
it('should allow custom indentation', function() {
|
||||
expect(filter('json')({a:"b"}, 4)).toEqual(toJson({a:"b"}, 4));
|
||||
});
|
||||
});
|
||||
|
||||
describe('lowercase', function() {
|
||||
|
||||
Reference in New Issue
Block a user