ng-click后的AngularJS重定向

时间:2013-10-10 02:53:53

标签: javascript node.js angularjs redirect mongoose

我有一个REST API,用于读取/保存MongoDB数据库中的数据。 我使用的应用程序从中检索表单并创建一个对象(作业),然后将其保存到DB。在表单之后,我有一个按钮,单击事件触发我的控制器的保存功能,然后重定向到另一个URL。

一旦我点击按钮,我就说这个工作已经被添加到数据库中,但是应用程序被卡住了,并且永远不会调用重定向。但是,如果我重新加载我的应用程序,我可以看到新的“作业”已经添加到数据库中。这有什么问题?谢谢!

这是我的代码:

示例html(jade)代码:

button.btn.btn-large.btn-primary(type='submit', ng:click="save()") Create

角度模块的控制器:

function myJobOfferListCtrl($scope, $location, myJobs) {

    $scope.save = function() {
        var newJob = new myJobs($scope.job);
        newJob.$save(function(err) {
            if(err)
                console.log('Impossible to create new job');
            else {
                console.log('Ready to redirect');
                $location.path('/offers');
            }
        });     
    };    
}

角度模块的配置:

var myApp = angular.module('appProfile', ['ngResource']);

myApp.factory('myJobs',['$resource', function($resource) {
    return $resource('/api/allMyPostedJobs',
            {},
            {
                save: {
                    method: 'POST'
                }   
            });
}]);

我的nodejs应用程序中的路由:

app.post('/job', pass.ensureAuthenticated, jobOffers_routes.create);

最后我的REST API的控制器:

exports.create = function(req, res) {
    var user = req.user;
    var job = new Job({ user: user, 
                        title: req.body.title,
                        description: req.body.description,
                        salary: req.body.salary,
                        dueDate: new Date(req.body.dueDate),
                        category: req.body.category});
    job.save(function(err) {
        if(err) {
            console.log(err);
            res.redirect('/home');
        } 
        else {
            console.log('New job for user: ' + user.username + " has been posted."); //<--- Message displayed in the log    
            //res.redirect('/offers'); //<---- triggered but never render
            res.send(JSON.stringify(job));
        }
    });
};

1 个答案:

答案 0 :(得分:3)

我终于找到了解决方案!这个问题在屏幕后面的18英寸处......

我修改了角度应用程序控制器,如下所示:

$scope.save = function() {
        var newJob = new myJobs($scope.job);
        newJob.$save(function(job) {
            if(!job) {
                $log.log('Impossible to create new job');
            }
            else {
                $window.location.href = '/offers';
            }
        });
    };    

诀窍是我的REST api将创建的作业作为json对象返回,我正在处理它,就像它是一个错误!因此,每次我创建一个作业对象时,我都返回了一个json对象,因为它是非null,所以触发了日志消息,我从未被重定向。 此外,我现在使用$window.location.href属性来完全重新加载页面。