简体   繁体   English

将AngularJS表单提交到链接的Mongoose模型

[英]Submitting AngularJS form to linked Mongoose model

I'm using mean.js and want to create two form. 我正在使用mean.js,并希望创建两种形式。 One for the website and another for website page template. 一个用于网站,另一个用于网站页面模板。

Website API POST route is /api/websites 网站API POST路由为/api/websites

Page Template API POST route is /api/websites/:websiteId/page-templates 页面模板API POST路由为/api/websites/:websiteId/page-templates

Website model modules/websites/server/models/website.server.model.js 网站模型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'
  }
});

Page Template model modules/websites/server/models/page-template.server.model.js 页面模板模型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 form for the website is working fine but the error appears on page template form 网站的角度表单工作正常,但错误出现在页面模板表单上

A snippet of Page Template form modules/websites/client/views/page-templates/form-page-template.client.view.html 页面模板表单modules/websites/client/views/page-templates/form-page-template.client.view.html

...
 <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>
...

Controller modules/websites/client/controllers/page-templates/page-templates.client.controller.js 控制器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!' });
      }
    }
  }

Website form is working fine. 网站表格运行正常。 The error is coming with the page template form. 错误与页面模板表单一起出现。 As far as I can understand, the page template form is not able to reference website to store. 据我了解,页面模板表格无法引用网站进行存储。

Getting this error on form submission 在表单提交时遇到此错误

页面模板表单提交错误

I had to target the $resource object of Angular and define the URL for query method manually like this 我必须以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'
      }
    });
....

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM