我的控制器无法更新Gui $scope
。
经过一些研究,我发现你可以使用$timeout
。
该服务在不同的单位上花费不同的时间,我不希望设置为5000超时因为应用程序感觉很慢。 还有其他办法吗?
.service('RowService', function ($q) {
var rows = undefined;
this.getrows = function (id) {
var local = new PouchDB('db');
var deferred = $q.defer();
// var rows = [];
local.query(function (doc, emit) {
emit(doc.type);
}, { key: 'row_detail' }).then(function (result) {
var rows = [];
for (i = 0; i < result.rows.length; i++) {
local.get(result.rows[i].id).then(function (response) {
if (response.orderid == orderId) {
rows.push(response);
}
deferred.resolve(rows);
})
}
}).catch(function (err) {
// handle any errors
});
rows = deferred.promise;
return $q.when(rows);
}
})
RowService.getrows($stateParams.id).then(function (data) {
// Not working example
$scope.rows = data;
// Working example
$timeout(function () {
$scope.rows = data;
}, 5000)
}
答案 0 :(得分:0)
$ scope。$ apply()有时会导致问题,但可以毫不拖延地调用$ timeout:
.service('RowService', function ($q) {
var rows = undefined;
this.getrows = function (id) {
var local = new PouchDB('db');
var deferred = $q.defer();
// var rows = [];
local.query(function (doc, emit) {
emit(doc.type);
}, { key: 'row_detail' }).then(function (result) {
var rows = [];
for (i = 0; i < result.rows.length; i++) {
local.get(result.rows[i].id).then(function (response) {
if (response.orderid == orderId) {
rows.push(response);
}
deferred.resolve(rows);
})
}
}).catch(function (err) {
// handle any errors
});
rows = deferred.promise;
return $q.when(rows);
}
})
RowService.getrows($stateParams.id).then(function (data) {
// Not working example
$scope.rows = data;
// Working example
$timeout(function () {
$scope.rows = data;
})
}
答案 1 :(得分:0)
然后不提供它将起作用的超时值,并且在执行所有功能后将调用该函数。此外,您在服务中起诉承诺,因此您不需要超时值。