angularjs回调/等待函数完成

时间:2015-08-17 14:32:58

标签: javascript angularjs

我有点卡在分配给$scope variable的功能上。 需要等到它完成。

这是分配给$scope variable功能

$scope.ChooseHome = function() {
    ModalWindowService.openChooseHomeDialog($scope);
}

在ModalWindowService中我有:

function openChooseHomeDialog($scope) {
    $scope.animationsEnabled = true;

    var modalInstance = $modal.open({
        animation: $scope.animationsEnabled,
        templateUrl: '/view/user/ChooseHomeDialog.html',
        controller: 'chooseHomeDialogController',
        windowClass: 'detail-modal-window'
    });
    modalInstance.result.then(function (CondoID) {
        $scope.choosenCondoID = CondoID;
    });
}

我想要做的是在'$ scope.ChooseHome'函数中从modal获取它之后正确接收这个变量'$ scope.choosenCondoID'并使用它做一些工作。

像这样的选择:

$scope.ChooseHome = function() {
    ModalWindowService.openChooseHomeDialog($scope).then(*do my stuff*); /
    ModalWindowService.openChooseHomeDialog($scope).success(*do my stuff*);
}

但它不起作用,我收到这样的错误:

'TypeError: (intermediate value).success is not a function'

2 个答案:

答案 0 :(得分:2)

试试这个:

function openChooseHomeDialog($scope) {
    $scope.animationsEnabled = true;

    return $modal.open({
        animation: $scope.animationsEnabled,
        templateUrl: '/view/user/ChooseHomeDialog.html',
        controller: 'chooseHomeDialogController',
        windowClass: 'detail-modal-window'
    }).result;
}

$scope.ChooseHome = function() {
    ModalWindowService.openChooseHomeDialog($scope).then(*do my stuff*);
}

而且...就像我评论的那样......将$ scope传递给你的服务是一个坏主意。您应该只在控制器中使用$ scope将数据粘贴到视图中。服务只需要做某事或返回你可以使用的东西。

让它更复杂一点..你可能想要查看controllerAs语法以及将来的代码证明;)

答案 1 :(得分:0)

您必须从openChooseHomeDialog函数

返回您的承诺
...
return modalInstance.result.then(function (CondoID) {
  $scope.choosenCondoID = CondoID;
});