AngularJS : 如何从 angular resolve 获取数据?

AngularJS : how to get data from angular resolve?

这是 fiddle 我的问题 http://jsfiddle.net/gxbwk6dk/7/

我有一项服务可以找到 json 的元素, 我从控制器调用该服务两次,但我从两次调用中获得的结果是相同的。

在示例中 elementObj1elementObj2 具有相同的数据

欢迎任何解决方案。

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,'GlossEntry').then(function(data){
     $scope.elementObj1=data;
  console.log("find element object1 ", $scope.elementObj1);
    });
    
    
    myservice.findElement($scope.sampleObj,'GlossList').then(function(data){
     $scope.elementObj2=data;
  console.log("find element object2 ", $scope.elementObj2);
    });



}
);


app.factory("myservice",function($q,$timeout){
var deferred = $q.defer();
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)
 {
         
 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://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myapp" ng-controller="myctrl">
<input type="text" ng-model="name" />
<h2 ng-bind="name"></h2>
    
display object 1
<table>
<tr ng-repeat="(key, value) in elementObj1">
  <td> {{key}} </td> <td> {{ value }} </td>
</tr>

</table>
    
display object 2
 
<table>
<tr ng-repeat="(key, value) in elementObj2">
  <td> {{key}} </td> <td> {{ value }} </td>
</tr>

</table>
    
    
</body>

这是一个可行的解决方案:http://jsfiddle.net/gxbwk6dk/9/

你返回的是同一个对象,你命中时我已经修改了:

if (obj === searchEle) {
  deferred = $q.defer();
  deferred.resolve(jsObject[obj]);
}