变量在我的第二个方法中未定义

时间:2015-12-07 12:45:12

标签: angularjs controller execution

我在angularjs应用程序中有一个控制器,我在其中调用两种服务方法。

当控制器启动时,我的第二个方法使用在我的第一个方法中设置的$ scope值。 $ scope值未定义,因为我无法在此清楚地找出执行顺序。

为什么在第一个方法中设置$ scope值之前调用第二个方法?我怎样才能以正确的方式解决这个问题?

angular.module("Modal")
.controller("MyController",
    function($scope, $log, ModalService, AuthService) {

        //First method - Calls a WEB API
        AuthService.FirstMethod(function (username) {
            $scope.username = "myName"; //Is set after SecondMethod is called
            $scope.items = "MyItems";
        });

        //Second method
        //$scope values here are undefined when initiating the controller
        ModalService.SecondMethod($scope.items, $scope.username, function (selectedItem) {
            var test = selectedItem;
        });


    }
);

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

function wrapUpFirst() {
    return $q(function(resolve,reject) {
        // Execute this function
        AuthService.FirstMethod(function(result) {
            resolve(result);
        }, function(error) {
            // Handle error
            reject(error);
        });
    });
}

所以这会返回一个我们可以在下面使用的promise并将结果传递给第二个方法:

wrapUpFirst().then(function(success) {
    // Use result for the second
    ModalService.SecondMethod(success, otherParams, func(){});
});