AngularJS承诺回调的范围

时间:2015-04-09 10:47:12

标签: angularjs angular-promise

我正在尝试使用promises来整理我的Angular代码。但是当我输入回调函数(成功或错误)时。我的范围已经消失。 $ scope,service和object在回调中都是null。

变量vm仍然是已知的。

关于如何解决此问题的任何想法?

(function (app) {
'use strict';
var MyController = (function () {
    function MyController($scope, aService, anotherService) {
        var vm = {
            loaded: false,
            anObjToInstantiate: null,
            error: null
        };

        aService.makeAServiceCall()
            .success(function (result) {
                vm.anObjToInstantiate = result.data;
                anotherService.notifySomething(); /* Null! */
                vm.loaded = true;
            })
            .error(_handleError);

        function _handleError(error) {
            vm.error = error;
        }

        return vm;
    };

    MyController.$inject = ['$scope', 'AService', 'AnotherService'];
    return MyController;
}());

app.controller('MyController', MyController);

}(angular.module('app.amodule')));

1 个答案:

答案 0 :(得分:1)

您的控制器定义错误。它不应该返回任何东西。它所做的就是使用范围变量和服务。

<强>控制器

(function(app) {
    'use strict';
    var MyController = function($scope, aService, anotherService) {
        $scope.vm = {
            loaded: false,
            anObjToInstantiate: null,
            error: null
        };

        aService.makeAServiceCall()
            .success(function(result) {
                $scope.vm.anObjToInstantiate = result.data;
                anotherService.notifySomething(); /* Null! */
                $scope.vm.loaded = true;
            })
            .error(_handleError);

        function _handleError(error) {
            $scope.vm.error = error;
        }
    };

    MyController.$inject = ['$scope', 'AService', 'AnotherService'];
}());

app.controller('MyController', MyController);

}(angular.module(&#39; app.amodule&#39;)));

对于ControllerAs它想在下面

<强>控制器(ControllerAs)

(function(app) {
    'use strict';
    var MyController = function($scope, aService, anotherService) {
        var ctrl = this;
        ctrl.vm = {
            loaded: false,
            anObjToInstantiate: null,
            error: null
        };

        aService.makeAServiceCall()
            .success(function(result) {
                ctrl.vm.anObjToInstantiate = result.data;
                anotherService.notifySomething(); /* Null! */
                ctrl.vm.loaded = true;
            })
            .error(_handleError);

        function _handleError(error) {
            ctrl.vm.error = error;
        }
    };

    MyController.$inject = ['$scope', 'AService', 'AnotherService'];
}());