1

這裏是撥弄我的問題http://jsfiddle.net/gxbwk6dk/7/AngularJS:如何從角度解析中獲取數據?

我有一個服務找到一個JSON, 的元素,我打電話從控制器服務兩次,但我與兩個電話得到的結果都是一樣的。

在示例 elementObj1

elementObj2具有相同的數據

任何解決方案將是受歡迎的。

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

 

 

 
} 
 
); 
 

 

 
app.factory("myservice",function($q,$timeout){ 
 
var deferred = $q.defer(); 
 
return{ 
 
\t addTwo:addTwo, 
 
\t findElement:findEle, 
 
\t sample:sample 
 
\t 
 
}; 
 

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

 
} 
 

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

 
function findEle(jsObject,searchEle) 
 
\t { 
 
      
 
\t for(obj in jsObject) 
 
\t { 
 
\t \t console.log("obj "+obj+" mapobj "+jsObject[obj]); 
 
\t \t if(obj===searchEle) 
 
\t \t { 
 
\t \t \t console.log("element found "+obj); 
 
      deferred.resolve(jsObject[obj]); 
 
\t \t \t 
 
\t \t } 
 
\t \t if(typeof jsObject[obj]==="object") 
 
\t \t findEle(jsObject[obj],searchEle); 
 
\t \t \t 
 
\t } 
 
     return deferred.promise; 
 
\t } 
 

 

 
});
<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>

回答

1

這裏是一個有效的解決方案:http://jsfiddle.net/gxbwk6dk/9/

您正在返回同一個對象,我都當你有一個命中修改:

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

太謝謝你了@ Johnny Ha –

+0

歡迎您光臨@thaveethu gce –