我在我的应用中使用了一个API,其中包含几个步骤:
控制器:
$scope.deferred = $q.defer()
function makeChart(start, finish) {
api.getDetail(start, fin).then(function(throughput) {
$scope.chartData = throughput;
$scope.deferred.resolve();
}, function(err) {
console.log(err);
})
}
api.getDetail(id).then(function(job){
makeChart(job.start, job.finish);
})
//指令
.directive('niceChart', [function(){
return {
restrict: 'E',
replace: true,
template: '<div>Nice Template!</div>',
link: function (scope, element, attrs) {
scope.deferred.then(function(){
// Do stuff
})
}
}
}])
当我这样做时,我得到scope.deferred.then is not a function
。
我在这里做错了什么?
答案 0 :(得分:1)
使用此代码:
scope.deferred.promise.then(function(){
// Do stuff
})
deferred
对象本身不是承诺,因此它没有必要的方法。您应该访问promise对象:scope.deferred.promise。
但我建议您将代码重构为以下内容,将promise
对象作为参数发送:
var deferred = $q.defer()
$scope.promise = deferred.promise;
function makeChart(start, finish) {
api.getDetail(start, fin).then(function(throughput) {
$scope.chartData = throughput;
deferred.resolve();
}, function(err) {
console.log(err);
})
}
api.getDetail(id).then(function(job){
makeChart(job.start, job.finish);
})
////////////////////////////
.directive('niceChart', [function(){
return {
restrict: 'E',
replace: true,
template: '<div>Nice Template!</div>',
link: function (scope, element, attrs) {
scope.promise.then(function(){
// Do stuff
})
}
}
}])