AngularJS:如何从服务中的递归函数中解析数据?

时间:2015-07-01 07:00:50

标签: angularjs angularjs-service angular-promise angularjs-factory

我附上了我的小提琴http://jsfiddle.net/gxbwk6dk/6/

我正在尝试在服务中做一些逻辑并将数据恢复到控制器。我可以得到一些简单的操作,如添加两个数字,但我没有从javascript对象获取find元素的数据? 请帮帮我

我的代码

var app = angular.module("myapp", []);

app.controller("myctrl", function ($scope, myservice) {
console.log("add of two " + myservice.addTwo(5, 7));

$scope.sum = myservice.addTwo(5, 7);


$scope.sampleObj = {
    "glossary": {
        "title": "example glossary",
            "GlossDiv": {
            "title": "S",
                "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": ["GML", "XML"]
                    },
                        "GlossSee": "markup"
                }
            }
        }
    }
};
myservice.findElement($scope.sampleObj, 'GlossDef').then(function (data) {
    $scope.elementObj = data;
    console.log("find element 12 then ", data);
});

console.log("find element ", myservice.findElement($scope.sampleObj, 'GlossDef'));
console.log("find element 1 ", myservice.sample($scope.sampleObj));

myservice.sample($scope.sampleObj).then(function (data) {

    console.log("find element 1 then ", data);

});

});


app.factory("myservice", function ($q, $timeout) {

return {
    addTwo: addTwo,
    findElement: findEle,
    sample: sample

};

function sample(jsObject) {
    var deferred = $q.defer();
    $timeout(function () {
        deferred.resolve(jsObject)
    }, 5000);

    return deferred.promise;

}

function addTwo(a, b) {
    return a + b;
}

function findEle(jsObject, searchEle) {
    var deferred = $q.defer();
    for (obj in jsObject) {
        console.log("obj " + obj + " mapobj " + jsObject[obj]);
        if (obj === searchEle) {
            console.log("element found " + obj);
            deferred.resolve(jsObject[obj]);

        }
        if (typeof jsObject[obj] === "object") findEle(jsObject[obj], searchEle);

        }
        return deferred.promise;
    }
});
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>
<body ng-app="myapp" ng-controller="myctrl">
<input type="text" ng-model="name" />
<h2 ng-bind="name"></h2>

<table>
<tr ng-repeat="(key, value) in elementObj">
  <td> {{key}} </td> <td> {{ value }} </td>
</tr>

</table>
    
    
</body>

0 个答案:

没有答案