2014-09-26 83 views
0

我试图从url中抓取产品的标识符(例如/product/<productId>),从MongoDB中抓取产品对象并使该对象在$scope中可访问我的应用程序。从url中抓取productId可以很好地与$routeParams一起工作,但是我很难将从MongoDB中移出并进入范围。

我的猜测是我需要在服务器端的products-controller.js中添加代码,但是如何从服务器端的$ scope调用productId?

我知道查询应该是什么样子(例如db.products.find({_id : ObjectId("5422c8b2d4cc50e99f007f73")})

server.js
app.get('/api/products', productsController.list);

app.js

var app = angular.module('productApp', ['ngResource', 'ngRoute']); 

app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { 
    $routeProvider 
     .when('/', { 
      templateUrl: '/views/productsoverview.html', 
      controller: 'productsController' 
     }) 
     .when('/product/:productId', { 
      templateUrl: '/views/productFocus.html', 
      controller: 'productFocusController' 
     }) 
     .otherwise({ 
      redirectTo: '/' 
     }); 
    $locationProvider.html5Mode(true) 
}]); 

app.controller('productsController', ['$scope', '$resource', 
    function($scope, $resource) { 
     var Product = $resource('/api/products'); 

     $scope.products = []; 

     Product.query(function (results) { 
      $scope.products = results; 
     }); 

}]); 

app.controller('productFocusController', ['$routeParams', '$scope', '$resource', 
    function($routeParams, $scope, $resource) { 
     if($routeParams.productId) { 
      $scope.productId = $routeParams.productId 

     } 
}]); 

产品控制器.js(服务器)

var Product = require('../models/product'); 
module.exports.list = function (req, res) { 
    Product.find({}, function (err, results) { 
    res.json(results); 
    }); 
} 

回答

1

我怎么能叫从服务器端的$范围产品ID? 通过$ scope.productId作为一个参数,它包含在URL像

路线在服务器端可以像

/api/products/:productId 

然后通过从客户端网址,以获取参数你的资源:

pp.controller('productsController', ['$scope', '$resource', '$routeParams', 
    function($scope, $resource,$routeParams) { 
     var ProductEndpoint = $resource('/api/products/:productId',{productId:'@productId'}); 
     var product = new ProductEndPoint(); 
     product.productId = $routeParams.productId; 
     $scope.products = []; 
     Product.query(function (results) { 
      $scope.products = results; 
     }); 

}]); 

在服务器端:

var Product = require('../models/product'); 
module.exports.list = function (req, res) { 
    Product.find({_id:req.params.productId}, function (err, results) { 
    res.json(results); 
    }); 
} 
+0

var var Product = $ resource('/ api/products /:productId',{productId:@productId});' – David 2014-09-28 14:54:39

+0

检查您的代码使用jshint我可以帮助您找到答案,但我不会写你的整个代码...检查整个文件有时你得到错误,它指向一个不同的代码行 – 2014-09-29 01:38:57

+0

添加单引号到资源$ resource('/API /产品/:的productId”,{产品编号: '@的productId'});并尝试阅读角度js文档 – 2014-09-29 13:23:46

相关问题