“SyntaxError:意外的令牌<”当使用$ routeparams时

时间:2015-09-05 11:36:00

标签: javascript angularjs node.js mongodb express

拥有mongodb,express和nodejs的角度应用。在应用程序中我有一个单位列表,并希望为每个单位添加“编辑”选项。 这是我的api.js的一部分:

api.route('/flats/:id')
  .get(function(req, res){
    Flat.findById(req.params.id, function(err, post){
      if(err){
        res.send(err);
      }
      res.json(post)
    })
  })
  .put(function(req, res){
    Flat.findById(req.params.id, function(err, flat){
      if(err){
        res.send(err);
      }
      return('TODO POST FLAT WITH ID');
    })
  })

这部分代码正常工作,并且在邮递员中我有一个正确的数组。 这是我的路线文件的一部分:

angular.module('appRoutes', ['ngRoute', 'ngResource'])
  .config(function($routeProvider, $locationProvider){
    $routeProvider
      .when('/flats/:id', {
        controller: 'FlatController',
        templateUrl: 'app/views/pages/edit.html'
      })          
    });

下一部分 - 这是一张包含所有单位的表格。点击我想打开一个单一的页面

<table class="table table-bordered table-hover">
  <thead>
    <tr>
      <th ng-repeat="field in flat.fields">
        {{ field }}
      </th>
    </tr>
  </thead>
  <tbody>
    <tr ng-click="flat.showflat(flatone._id)" ng-repeat="flatone in flat.flats">
      <td ng-repeat="field in flat.fields">
        {{ flatone[field] }}
      </td>
    </tr>
  </tbody>
</table>

这是我的控制器的一部分:

angular.module('flatCtrl', ['flatoneService'])
  .controller('FlatController', ['FlatOne', '$filter', '$location', '$timeout', '$interval', '$routeParams', function(FlatOne, $filter, $location, $timeout, $interval, $routeParams){
    vm = this;
    vm.flats = FlatOne.query();
    vm.showflat = function(_id){
      var flatId = _id;
      vm.flatsToEdit = FlatOne.get({id: $routeParams._id});
      $location.url('/flats/edit');
    }
  }])

在这个控制器中我正确_id,但$ routeParams是未定义的,我不明白为什么。

这是我的服务:

angular.module('flatoneService', [])
  .factory('FlatOne', function ($resource){
    return $resource('/api/flats/:id', {id:'@_id'}, {
      'update': {method: 'PUT'}
    });
  });

结果当我点击该行时,我有一个正确的URL,例如http://localhost:3000/flats/55c59f11cbe8d2b4105c149c,并出现错误:SyntaxError:Unexpected token&lt;。我希望获得app / views / pages / edit.html,但获取主页的html代码。

SyntaxError:意外的令牌&lt;     在eval(原生)     在https://code.jquery.com/jquery-1.11.3.min.js:2:2622     在Function.m.extend.globalEval(https://code.jquery.com/jquery-1.11.3.min.js:2:2633)     在m.ajaxSetup.converters.text脚本(https://code.jquery.com/jquery-1.11.3.min.js:5:26520)     在Pb(https://code.jquery.com/jquery-1.11.3.min.js:5:18363)     在x(https://code.jquery.com/jquery-1.11.3.min.js:5:21793)     在m.ajaxTransport.a.send.b(https://code.jquery.com/jquery-1.11.3.min.js:5:26030)     at Object.m.ajaxTransport.a.send(https://code.jquery.com/jquery-1.11.3.min.js:5:26134)     在Function.m.extend.ajax(https://code.jquery.com/jquery-1.11.3.min.js:5:21570)     在Function.m._evalUrl(https://code.jquery.com/jquery-1.11.3.min.js:5:22649

2 个答案:

答案 0 :(得分:0)

您应该更正FlatOne.get来电,$routeParam应该是$routeParams.id /您可能已经将该参数传递给_id&amp;然后将id更改为_id,因为{id:'@_id'}中有$resource

vm.flatsToEdit = FlatOne.get({_id: _id});

答案 1 :(得分:0)

您已经将id传递给show function:

ng-click="flat.showflat(flatone._id)"

所以我认为没有必要使用$ routeParams:

vm.showflat = function(_id){
  var flatId = _id;
  //vm.flatsToEdit = FlatOne.get({id: $routeParams._id});
  vm.flatsToEdit = FlatOne.get({id: _id}); // may be this?
  $location.url('/flats/edit');
}