【问题标题】:Submitting AngularJS form to linked Mongoose model将 AngularJS 表单提交到链接的 Mongoose 模型
【发布时间】:2018-11-30 07:38:34
【问题描述】:

我正在使用mean.js 并想创建两个表单。一个用于网站,另一个用于网站页面模板。

网站 API POST 路由是/api/websites

页面模板 API POST 路由是/api/websites/:websiteId/page-templates

网站模型 modules/websites/server/models/website.server.model.js

var WebsiteSchema = new Schema({
  name: {
    type: String,
    default: '',
    required: 'Please fill Website name',
    trim: true
  },
  domain: {
    type: String,
    required: 'Please fill a correct domain name',
    trim: true
  },
  active: {
    type: Boolean,
    default: true,
    required: true
  },
  country: {
    type: String,
    required: true
  },
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  }
});

页面模板模型modules/websites/server/models/page-template.server.model.js

var PageTemplateSchema = new Schema({
  website: {
    type: Schema.ObjectId,
    required: 'Website object not found'
  },
  template_name: {
    type: String,
    trim: true,
    required: 'Please enter template name'
  },
  art_name_dom: {
    type: String,
    trim: true
  },
  active: {
    type: Boolean,
    default: true,
    required: true
  },
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  }
});

网站的 Angular 表单工作正常,但页面模板表单上出现错误

页面模板表单modules/websites/client/views/page-templates/form-page-template.client.view.html的sn-p

...
 <p class="card-description">Website: <a href="{{vm.website.domain}}" target="_blank">{{vm.website.name}}</a></p>
 <form name="vm.form.pageTemplateForm" class="forms-sample" ng-submit="vm.save(vm.form.pageTemplateForm.$valid)"
              novalidate>
...

控制器 modules/websites/client/controllers/page-templates/page-templates.client.controller.js

angular
    .module('websites')
    .controller('PageTemplatesController', PageTemplatesController);

  PageTemplatesController.$inject = ['$scope', '$state', '$window', 'Authentication', 'websiteResolve', 'pageTemplateResolve', 'Notification'];

  function PageTemplatesController($scope, $state, $window, Authentication, website, pageTemplate, Notification) {
    var vm = this;

    vm.authentication = Authentication;
    vm.page_template = pageTemplate;
    vm.website = website;
    vm.error = null;
    vm.form = {};
    vm.save = save;

    // Save Website
    function save(isValid) {
      if (!isValid) {
        $scope.$broadcast('show-errors-check-validity', 'vm.form.pageTemplateForm');
        return false;
      }

      vm.page_template.createOrUpdate()
        .then(successCallback)
        .catch(errorCallback);

      function successCallback(res) {
        $state.go('websites.view'); // should we send the User to the list or the updated Article's view?
        Notification.success({ message: '<i class="glyphicon glyphicon-ok"></i> Article saved successfully!' });
      }

      function errorCallback(res) {
        Notification.error({ message: res.data.message, title: '<i class="glyphicon glyphicon-remove"></i> Article save error!' });
      }
    }
  }

网站表单运行良好。页面模板表单出现错误。据我了解,页面模板表单无法参考网站进行存储。

在提交表单时收到此错误

【问题讨论】:

    标签: javascript angularjs node.js meanjs


    【解决方案1】:

    我必须以 Angular 的 $resource 对象为目标,并像这样手动定义查询方法的 URL

    function PageTemplatesService($resource, $log) {
        var PageTemplate = $resource('/api/websites/:websiteId/page-template/:pageTemplateId', {
          pageTemplateId: '@_id',
          websiteId: '@_id'
        }, {
          save: {
            url: '/api/websites/:websiteId/page-templates',
            method: 'POST'
          },
          query: {
            url: '/api/websites/:websiteId/page-templates'
          },
          update: {
            method: 'PUT'
          }
        });
    ....
    

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 1970-01-01
      • 2013-06-19
      • 2018-02-21
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多