我已经问过这是几个版本,但我现在有一些确定的代码,其中包含一个我无法挖掘的错误。
我有一个像这样的Angular服务:
.service("lookupDataService", [
'$q', '$http', '$timeout', function($q, $http, $timeout) {
this.brokers = function() {
var cachedBrokers = localStorage.getItem("brokers");
if (!cachedBrokers) {
return $http.get('/api/brokers')
.success(function (data) {
localStorage.setItem("brokers", data);
});
} else {
return $timeout(function () {
return {
"data": localStorage.getItem("brokers")
}
}, 1000);
}
}
}])
我在我的控制器中使用此服务
$scope.loadData = function() {
$scope.promise = $q.all([
lookupDataService.brokers()
.then(function(data) { $scope.enquiriesBrokers = data; }),
]);
};
现在我知道这个代码存在一些问题,但我主要关注的是尝试从服务中向我的控制器返回一个promise。例如,$ q显然没有做任何承诺,但我向你保证它会在代码的后期发生。
检查服务中的数据会检索所需的结果,但是当这个数据流向控制器时,数据是[Object object]而不是这些数据的数组。
如果我没有承诺,我该如何回复?
以下是从服务返回的JSON示例:
以下是HTML的示例:
<div class="col-sm-4">
<label for="enquiries-broker">Broker:</label>
<select ng-model="equiriesSelectedBroker" class="form-control" ng-options="broker.brokerCodeField for broker in enquiriesBrokers" id="enquiries-broker">
<option value="">Please select a broker</option>
</select>
</div>
答案 0 :(得分:2)
使用 $ q 对象并返回承诺
CREATE TABLE `emp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`salary` int(10) DEFAULT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
即使没有$ http电话,你也会始终得到承诺
修改强>
使用JSON填充SELECT salary
FROM emp
WHERE salary = (SELECT DISTINCT(salary)
FROM emp AS e1
WHERE (n) = (SELECT COUNT(DISTINCT(salary))
FROM emp AS e2
WHERE e1.salary <= e2.salary))
,以便.service("lookupDataService", [
'$q', '$http', '$timeout', function($q, $http, $timeout) {
this.brokers = function() {
var defer = $q.defer()
var cachedBrokers = localStorage.getItem("brokers");
if (!cachedBrokers) {
$http.get('/api/brokers')
.success(function (data) {
// defer resolve
defer.resolve({data:data})
localStorage.setItem("brokers", angular.toJson(data));
});
} else {
// defer resolve
defer.resolve({data:angular.fromJson(cachedBrokers) })
}
// defer return promise
return defer.promise;
}
}])
获得 userIdField
SELECT
告诉您使用ng-model
作为值,使用broker.userIdField as broker.brokerCodeField for broker in enquiriesBrokers
作为标签
broker.userIdField