0

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"/>

但它不可能这么简单:) 我得到:“无法保存 Rate.cmp:意外令牌:'('在表达式的第 46 列:c.My_Controller.getRate('A','B'):来源”

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

4

2 回答 2

1

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

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

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

然后,您的 JavaScript 客户端控制器需要异步进行服务器端调用,以从 Apex 获取值。最后,来自该异步方法的 Lightning JavaScript 回调会将返回值填充<aura:attribute><lightning:input>.

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

于 2019-07-09T21:22:50.607 回答
1
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);
    }
    })
于 2019-07-14T14:49:23.397 回答