我有一个带有两个$ scope属性的Angular控制器:
$scope.details = ortabilityService.detail();
$scope.treeViewOptions = {
dataSource: new kendo.data.HierarchicalDataSource({
data: $scope.details
};
正如我们所看到的,树视图选项依赖于在将其用作数据源之前要解析的细节。现在,问题是它是一个异步调用,它总是不能保证它在treeviewOptions中使用之前已被解析。因此,它是一种非常不可靠的负载,有时会加载并且不会加载一些时间。如何确保$ scope.details在treeViewOptions中使用之前有值?
答案 0 :(得分:2)
目标不是在使用它之前确保它有一个值,而是确保当它获得它的值时,页面会更新。
你可以使用手表或承诺来做到这一点。
$scope.details = ortabilityService.detail();
$scope.$watch('details', function(newValue, oldValue) {
$scope.treeViewOptions = {
dataSource: new kendo.data.HierarchicalDataSource({
data: newValue
};
});
答案 1 :(得分:2)
如果detail()
返回承诺,您可以执行以下操作:
ortabilityService.detail().then(function(result) {
$scope.details = result;
$scope.treeViewOptions = {
dataSource: new kendo.data.HierarchicalDataSource({
data: $scope.details
})
};
});
修改强>
正如所指出的那样,ortabilityService.detail().$promise.then
适用于这种情况。
答案 2 :(得分:0)
我发现有角度的剑道可以很好地兑现承诺: AngularJS : Where to use promises? 一些伪代码可能是:
Range("B:C,F:G,I:L,N:N").EntireColumn.Hidden = True
或者您可以加载剑道数据,例如
$scope.ctrl.details.$promise.then(function (results) {
$scope.treeViewOptions = {
dataSource: new kendo.data.HierarchicalDataSource({
data: results
};
}
答案 3 :(得分:0)
考虑ortabilityService.detail()返回一个承诺
ortabilityService.detail().then(
function success(result){
$scope.treeViewOptions = {
dataSource: new kendo.data.HierarchicalDataSource({
data: result
});
},
function error(result){
//when it fails to load
}
);