2013-09-21 2 views
0

Вот мой AngularJs код в файле app.js

var CarApp = angular.module('CarApp',['ngResource']) 

CarApp.config(function($routeProvider){ 
    $routeProvider 
     .when('/',{controller:ListCtrl,templateUrl:'partials/list.html'}) 
     .when('/edit/:id',{controller:EditCtrl,templateUrl:'partials/details.html'}) 
     .otherwise({redirectTo:'/'}) 

    }); 

    // to map update method 
    CarApp.factory('CarsService',function($resource){ 
     return $resource('/api/cars/:id',{id:'@_id'} , {update:{method:'PUT'}}) 
    }); 

    function EditCtrl($scope,$location,$routeParams,CarsService){ 

var id = $routeParams.id; 

//console.log(id); 

CarsService.get({id: id},function(resp){ 
    $scope.car = resp; 

}); 

// Update Page title 
$scope.action = "Update"; 

    $scope.save = function() { 
    CarsService.update({id:id},$scope.car,function(){ 
     $location.path('/') 
    }); 
    } 
} 

Вот мой курьерский server.js код

var express = require('express'); 
    var http = require('http'); 
    var path = require('path'); 
    var cars = require('./server/api/cars.js') 

    var app = express(); 

    var client_dir = path.join(__dirname, '/client') 

    // all environments 
    app.set('port', process.env.PORT || 3000); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(app.router); 
    app.use(express.static(client_dir)); 
    app.use(express.static(path.join(__dirname, '/image'))); 


    app.get('/', function(req,res){ 
     res.sendfile(path.join(client_dir,'index.html')) 

    }); 

    // ordering is important to for angularJs to differentiate between list all and read 

    app.get('/api/cars',cars.list); 

    app.get('/api/cars/:id',cars.read); 
    app.post('/api/cars/',cars.create); 
    app.put('/api/cars/:id',cars.update); 
    app.del('/api/cars/:id',cars.delete); 

    http.createServer(app).listen(app.get('port'), function(){ 
     console.log('Express server listening on port ' + app.get('port')); 
    }); 

Вот мои детали .html код

<h2>{{action}} Ferrari</h2> 

    <form name="carform" class="form-horizontal"> 

     <div class="control-group"> 
      <label class="control-label" for="year">Year</label> 
      <div class="controls"> 
       <input type="text" ng-model="car.year" id="year" name="year" placeholder=""> 
      </div> 
     </div> 

<div class="form-actions"> 
    <button ng-click="save()" class="btn btn-primary"> 
     Update 
     </button> 
     <a href="/" class="btn">Cancel</a> 
    </div> 
</form> 

Вот мой MongoDB бэкенд служба

function update(req,res){ 

var newCarData = req.body; 
var id = req.params.id; 

newCarData._id = ObjectId(id); 
updateCar(newCarData,function(err){ 
    if(err) throw new Error("unable to update"); 

    else{ 
     res.json(); 
    } 
    }); 
} 


function updateCar(car,callback){ 
    db.collection(collectionName,function(error,collection){ 
     if(error) callback(true); 

     else { 
      collection.save(car,function(){ 
       //console.log("updated data") ; 
      }); 

     } 
    }); 
    } 

Проблема, с которой я столкнулся, - это когда я нажимаю кнопку «Обновить» в файле details.html, я могу обновить данные в моем бэкэнд-сервисе mongodb.

В консоли метод пут называется, но я не может перенаправить на путь «/», используя $ location.path («/») в angularJs app.js файле? Любая помощь будет высоко оценена.

+0

Hva Вы попытались поместить параметер в обратный вызов метода put следующим образом: $ scope.save = function() { CarsService.update ({id: id}, $ scope.car, function (resp) { $ location.path ('/') }); } –

+0

Да добавленный параметр resp, не удача все еще не работает – shaunak1111

ответ

2

В соответствии с docs, $location не вызывает перезагрузки полной страницы при изменении URL-адреса браузера. Чтобы перезагрузить страницу после изменения URL-адреса, используйте API нижнего уровня, $window.location.href.

+0

$ window.location.href ('/') все еще не перенаправляется – shaunak1111

+0

Вы пробовали простой Javascript 'location.href'? Если это не работает, значит, у вас есть проблема где-то в другом месте. – jtblin

+0

да я пробовал location.href не знаю, в чем проблема – shaunak1111

0

Вам нужно создать контроллер ListCtrl, даже если в нем ничего нет. У вас, вероятно, есть ошибка в вашем веб-инспекторе, говоря, что он не может найти ListCtrl.

+0

У меня есть ListCtrl, я не вставлял код ListCtrl – shaunak1111

0

Похоже, в вашей функции updateCar, вы не звоните обратный вызов на успех попытке: не

function updateCar(car,callback){ 
    db.collection(collectionName,function(error,collection){ 
    if(error) callback(true); 

    else { 
     collection.save(car,function(){ 
      //console.log("updated data") ; 
      callback(null, { ok: true }); //something like this. 
     }); 

    } 
    }); 
} 

Таким образом, ваш обратный вызов в редактированиях Ctrl, который вызывает location.path, был никогда быть вызван. : D

Смежные вопросы