AngularJS : 如何从 angular resolve 获取数据?
AngularJS : how to get data from angular resolve?
这是 fiddle 我的问题 http://jsfiddle.net/gxbwk6dk/7/
我有一项服务可以找到 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;
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]);
}
这是 fiddle 我的问题 http://jsfiddle.net/gxbwk6dk/7/
我有一项服务可以找到 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;
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]);
}