显示从控制器方法返回的值

Display value as returned from controller method

Salesforce 初学者,请多多包涵。 我创建了一个闪电组件,我想在页面上显示组件控制器返回的值。

public class My_Controller { 
@AuraEnabled
public static Decimal getRate(String currFrom, String currTo) {

Decimal value = 1.067773;

return value;  
}
}

<aura:component controller="My_Controller">

<lightning:input type="string" name="res" aura:id="res" value= " 
{!c.My_Controller.getRate('A', 'B')}" label="Result"/>

但这不可能那么简单:) 正如我得到的:"Failed to save Rate.cmp: unexpected token: '(' at column 46 of expression: c.My_Controller.getRate('A', 'B'): Source"

调用方法的正确方法是什么?

您不能直接从 Lightning 客户端标记调用 Apex 服务器控制器方法。

相反,您需要在组件标记中声明 <aura:attribute> 并将值绑定到该属性。

<aura:attribute name="rate" type="String" />
<lightning:input type="string" name="res" aura:id="res" value="{! v.rate }" label="Result"/>

然后,您的 JavaScript client-side 控制器需要异步创建一个 server-side call,以从 Apex 获取值。最后,来自该异步方法的 Lightning JavaScript 回调会将 return 值填充到 <aura:attribute> 中,框架的数据绑定基础设施将负责更新 <lightning:input>

这听起来很复杂,但它主要是样板代码。上面链接的文档包含详细示例。

public class My_Controller { 
@AuraEnabled
public static Decimal getRate(String currFrom, String currTo) {

Decimal value = 1.067773;

return value;  
}
}

<aura:component controller="My_Controller">
<aura:attribute name = "value" type= "Decimal"/>
  <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
<lightning:input type="string" name="res" aura:id="res" value= " 
{!v.value}" label="Result"/>

<aura:component>

add a new method in controller.js:-
({

    doInit : function(component, event, helper) {
        var action = component.get("c.getRate");
        action.setParams({
            "currFrom": 'Test',
            "currTo"  : 'Test'
        });

        action.setCallback( this, function(actionResult) {
            var state = actionResult.getState();
            component.set('v.spinner',false);
            if (state === "SUCCESS"){
                var result = actionResult.getReturnValue();
                component.set("v.value",result);
            }
        });
        $A.enqueueAction(action);
    }
    })