服务中定义的AngularJS服务访问变量

时间:2016-06-29 15:14:25

标签: angularjs json

我有一个Angular实用程序服务器,并且我有一个方法可用于在JSON中搜索某些值,如下所示。

angular.module('myAppModule')
.service('myService', ['$rootScope', function($rootScope)
{
    this.myTestJson = '[{"id":1,"somthing":"somthing"},{"id":2,"somthing":"somthing"}]';

    this.getJsonObj = function(id)
    {
        if(id == null || id == undefined || id == "")
            return null;

        // Units Convert to JSON 
        var jsonObj = JSON.parse(JSON.stringify(this.myTestJson)); // How can I avoid this doing every time ?

        console.log("getJsonObj: jsonObj.length: "+jsonObj.length); //--> Printed invalid number, length of the string 
        for(var index=0;index < jsonObj.length;index++)
        {
            if( id == jsonObj[index].id )
                return jsonObj[index];
        }
        return null;
    };

}]);

问题是我将JSON数组长度视为无效,因此我无法循环数组。

如何访问在同一服务中定义的此JSON变量。

1 个答案:

答案 0 :(得分:2)

this.myTestJson = '[{"id":1,"somthing":"somthing"},{"id":2,"somthing":"somthing"}]';

因此,myTestJson是一个包含JSON有效负载的String。

var jsonObj = JSON.parse(JSON.stringify(this.myTestJson));

在这里,你将这个JSON字符串序列化为JSON,只是在之后重新解析它。这没有任何意义:你最终会得到与原始字符串完全相同的字符串。就像,如果你将一个整数转换为一个String,然后将该String解析为一个整数,你将得到原始整数。

要解析原始JSON并将其转换为JavaScript数组,您只需要

var array = JSON.parse(this.myTestJson);

但即使这是完全没必要的,因为您可以从一开始就使用JavaScript数组,而不是解析JSON字符串:

var array = [
    {
        id: 1, 
        somthing:"somthing"
    },
    {
        id: 2,
        somthing: "somthing"
    }
];