最佳做法angularjs ajax请求和重定向

时间:2014-04-30 13:37:36

标签: ajax angularjs angularjs-scope

我有一个originCtrl模板和控制器。在这个我有一个按钮去另一个模板和控制器。但是在destCtrl上,我需要来自ajax请求的信息。 这是我的控制器代码的一部分:

.controller('OriginCtlr', function ($scope, $rootScope, $http, $location, $cookies) {
    $scope.startTest = function () {
        $http.post(API_URL + 'creates/tests.json', {'id':$scope.dic.id, 'nbQuestion':$scope.nbquestion}).success(function (data) {
            $rootScope.words = angular.toJson(data.words);
            $location.path('/questions');
        });
    };
})
.controller('DestCtrl', function ($scope, $http, $location, $cookies) {
    $rootScope.$watch('words', function(newValue, oldValue) {
         scope.word = scope.counter + 1;
    });
})

我想知道我在哪里做我的ajax请求:

1)在originCtlr中执行ajax请求,在rootScoope中执行数据,并在成功后重定向

2)在originCtlr中执行ajax请求,在rootScoope中执行数据,并重定向

3)在$ location.pathand中传递参数在destCtlr中执行ajax请求

4)???

1 个答案:

答案 0 :(得分:2)

如果您想在控制器之间共享数据,则应使用服务

.service('testsService', function ($http, $location) {
    this.words = {};

    this.createTests = function (id, question) {
        $http.post(API_URL + 'creates/tests/json', {id: id, nbQuestion: question})
            .success(function (data) {
                this.words = angular.toJson(data.words);
                $location.path('/questions');
            }.bind(this));
    }
})

然后,您可以将testsService注入您的控制器并从服务访问words,而不是使用$rootScope