LWC,使用wire和Apex从JavaScript设置记录到数据库soql,错误

问题描述

我尝试在 JS 中向数据库 soql 写一些东西,但它不起作用。 当我单击“添加到购物车”按钮时,它被称为 handlePlaceOrder()。 这里调用了带有参数 String 的 Apex 方法 placeOrder('hello')。 然后它崩溃了“内部服务器错误”。 当我在开发者控制台中只执行 Apex 方法 placeOrder('Order01') 时,它可以工作,将 nameOfOrder 写入数据库

代码如下:

html(确定):

<template>
  <div class="shopping-cart">
    <template if:true={messageFromMain}>
      <div class="container">
        <h1>Items in Cart</h1>
        <lightning-card title="Shopping cart">
          <lightning-button 
            class="slds-m-left_x-small"  
            label="Place order" 
            title="Place order"
            variant="success"
            onclick={handlePlaceOrder}>
          </lightning-button>
        </lightning-card>
      </div>
    </template>
    <template if:false={messageFromMain}>
      <h1>Select the shoes</h1>
    </template>
  </div>
</template>

JS(错误):

import { LightningElement,api,wire } from 'lwc';
import placeOrder from '@salesforce/apex/ProductMaster.placeOrder';

export default class ShoppingCart extends LightningElement {
  nameOfOrder;

  @api messageFromMain;

  @wire(placeOrder,{ nameOfOrder: '$nameOfOrder'})


  // handle click to button Place order
  handlePlaceOrder() {
    console.log('It was pressed button \'Add to Cart\'.');

    placeOrder('hello');
  }
}

顶点(好):

@AuraEnabled(cacheable=true)
public static void placeOrder(String nameOfOrder) {
  Shop_Order__c newOrder = new Shop_Order__c(
    Text__c = nameOfOrder
  );
  insert newOrder;
}

错误

Error: An internal server error has occurred
Error ID: 185265246-97831 (-1502885840)
    at U.B.mk (https://static.lightning.force.com/eu40/auraFW/javascript/Q8onN6EmJyGRC51_NSPc2A/aura_prod.js:656:438)

这段 JavaScript 代码有什么不正确的地方? Here一个有类似问题的例子。

解决方法

@wire(placeOrder,{ nameOfOrder: '$nameOfOrder'})

您可能必须删除该行。您的 handlePlaceOrder() 被视为该行的延续(忽略换行符),作为异步处理完成时要做什么(回调)的处理程序。在你链接的答案中,比较你用“fetchedContact”写的内容

handlePlaceOrder 中,我认为您需要将参数作为 JSON 对象传递,其中名称与顶点参数的名称相匹配。试试

顶点

@AuraEnabled
public static Id insertAccount(String n){
    Account a = new Account(Name = n);
    insert a;
    return a.Id;
}

组件相关的html

<lightning-button label="test" onclick={handlePlaceOrder}>
</lightning-button>

组件相关的JS

import insertAccount from '@salesforce/apex/SomeClass.insertAccount';
export default class SomeComp extends LightningElement {
handlePlaceOrder() {
        console.log('It was pressed button \'Add to Cart\'.');
        insertAccount({ n: 'hello' })
            .then(result => {
                console.log(result);
            })
            .catch(error => {
                debugger;
            });
    }

}

浏览器控制台 enter image description here

它保存了名称 OK

enter image description here