nodejs和mongodb中的类别和子类

时间:2016-04-05 16:35:08

标签: node.js mongodb

我想在MEAN应用程序中构建一个Category和Subcategory功能。

我有这样的ProductCategoryModel.js模型:

var mongoose = require('mongoose');

var productCategorySchema = mongoose.Schema({
    title:{ type:String, required:true },
    slug:{ type:String, required:true },
    status:{ type:Number, required:true, default:1},
    description:{ type:String, required:true },
    post_type:{type:String, default:'product_catgory'},
    parentID:{ type:mongoose.Schema.Types.ObjectId, ref:'ProductCategory', default:null},
});
module.exports = mongoose.model('ProductCategory', productCategorySchema);

产品类别控制器

adminApp.controller('ProductCategoryModalInstanceCtrl', function ($scope, productcategory, $http, $uibModalInstance) {

$scope.productCatList =  [];    
return $http.get('/api/product-category/parent-cat-list')
      .then(function (result) {
        $scope.productCatList =  result.data;
      });

});

产品类别表格

<div class="form-group" ng-class="{ 'has-error' : productCategoryForm.parentID.$invalid && !productCategoryForm.parentID.$pristine }">
 <label>Parent Category</label>
<select name="parentID" class="form-control" id="parentID" ng-model="productcategory.parentID">
    <option ng-repeat="category in productCatList" value="{{category._id}}">
    {{category.title}}</option>
</select>
</div>

现在我的问题是我想在新的下拉列表中显示所选父类别的子类别,我怎么能这样做,我认为应该有一个新的下拉列表并在更改父类别下拉列表时更新其内容。

第二个问题是这行代码没有返回父类别,其中parentID = null,它返回所有类别的列表。

return Promise.denodeify(Models.ProductCategoryModel.find.bind(Models.ProductCategoryModel))({ parentID: null })
    .then(function (results) {
      return results;
    });

1 个答案:

答案 0 :(得分:0)

您可以这样做:

adminApp.controller('ProductCategoryModalInstanceCtrl', function ($scope, productcategory, $http, $uibModalInstance) {
        $scope.productCatList =  [];
        return $http.get('/api/product-category/parent-cat-list')
                    .then(function (result) {
                          $scope.productCatList =  result.data;
                      });

        $scope.$watch('productcategory.parentID', function(newValue, oldValue, scope) {
              if(newValue != oldValue){
                    $http.get('/api/product-category/' + $scope.productcategory.parentID)
                         .then(function (result) {
                                $scope.productSubCatList =  result.data;
                         });
              }
        });
  });

$watch会查找对productcategory.parentID的更改,然后在更改时,您可以向API发送获取请求,以获取parentID所属的所有类别指定。

在服务器端,您必须创建一个端点,该端点根据parentID字段返回所有类别。在请求处理程序中,您可以执行以下操作:

Product.find({parentID: req.params.parentID}, function(err, categories){
  if(err) console.log("Error: " + JSON.stringify(err));
  else if(categories) res.json(200, categories);
});

这可能无法完全为您提供解决方案,但这是一种可以遵循的方法。