前两篇分别介绍了Component类以及Event类,此篇将会说一下 $A , Action以及 Util。

 一. Action

Action类通常用于和apex后台交互,设置参数,调用后台以及对结果进行处理。可以通过component.get("c.functionName")创建一个action类的变量,functionName对应后台@AuraEnabled声明的方法。通过$A.enqueueAction可以将action加入队列中等待执行。

常用方法如下:

1.setParam (string key,Object value): 为这个Action设置单一的参数,此参数应该和后台apex中的参数名称一致;

2.setParams (Object config): 为这个Action设置一组参数,这组参数的名称应该和后台apex中的参数名称一致;

3.getName ():获取Action的Name。比如 var action = component.get("c.functionName"); 则此函数返回functionName;

4.getReturnValue ():获取Action从server端返回的response;

5.isBackground (): 判断当前的action在队列中是前台执行还是后台执行,后台执行返回true,前台返回false;

6.getError ():返回一组错误信息;

7.setCallback (Object scope,function callback,String name):当server端action返回以后,callback action将会被执行。方法有三个参数:

  • scope:方法被执行的作用域,通常设置为this;
  • callback:当server端action完成后,会调用这个callback函数。这个callback函数可以在显示阶段中注册,通常判断的显示阶段有三种:SUCCESS/ERROR/INCOMPLETE。通常 getError()方法和ERROR这种阶段结合来用;

Demo 举例:

1. TestActionController: 声明一个server端方法,用于component初始化调用;

public class TestActionController {
@AuraEnabled
public static String initData(String testParam) {
return 'For test response : ' + testParam;
}
}

2. TestAction.cmp:初始化调用doInit方法对attribute进行初始化;

<aura:component controller="TestActionController" implements="flexipage:availableForAllPageTypes">
<aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
<aura:attribute name="testAttribute" type="String" description="test description"/>
{!v.testAttribute}
</aura:component>

3. TestActionController.js:通过action类调用后台并且对response进行处理。

({
doInit : function(component, event, helper) {
var action = component.get('c.initData');
action.setParam('testParam','lightning test action class');
//action.setParams({'testParam':'lightning test action class'});
action.setCallback(this, function(response) {
var state = response.getState();
console.log('state : ' + state);
if(state === 'SUCCESS') {
var responseValue = response.getReturnValue();
console.log('get name : ' + action.getName());
component.set('v.testAttribute',responseValue);
}
else if(state === 'INCOMPLETE') {
console.log('incomplete state');
} else if(state === 'ERROR') {
if (errors) {
if (errors[0] && errors[0].message) {
console.log("Error message: " +
errors[0].message);
}
} else {
console.log("Unknown error");
}
}
});
$A.enqueueAction(action);
}
})

结果展示:

 二. Util

Util类提供了一些方法去判断变量类型,去动态增加、删除class等。使用 $A.Util.functionName既可以使用Util类提供的方法。

常用方法如下:

1. addClass (Object element,String newClass):向一个元素添加某个class;

2. hasClass (Object element,String className):判断某个元素中是否有某个指定的class;

3. removeClass (Object element,String newClass):对某个元素移除某个class;

4. toggleClass (Object element,String className):向某个元素切换(添加/删除)某个class;

5. isArray (Object obj): 判断当前的对象是否是一个数组;

6. isEmpty (Object obj):判断一个对象是否为空,空包括:undefined/null/空数组/空字符串;

7. isObject(Object obj):判断当前的对象是否为一个valid的对象。valid包括:非DOM元素/非浏览器类/非Array/非error/非string/非number.

8. isUndefined (Object obj):判断对象是否为undefined;

9. isUndefinedOrNull (Object obj):判断对象是否为undefined或者null;

Demo举例:

1. TestUtils.css

.THIS.changeUI {
background-color: red;
}

2. TestUtils.cmp

<aura:component>
<div aura:id="testChangeUI">Change This background</div>
<br/>
<lightning:button onclick="{!c.addStyle}" label="Add Style"/>
<lightning:button onclick="{!c.removeStyle}" label="Remove Style"/>
<lightning:button onclick="{!c.toggleStyle}" label="Toggle Style"/>
</aura:component>

3. TestUtilsController.js

({
addStyle : function(component, event, helper) {
var targetComponent = component.find('testChangeUI');
if(!$A.util.hasClass(targetComponent, 'changeUI')) {
$A.util.addClass(targetComponent, 'changeUI');
}
},
removeStyle : function(component, event, helper) {
var targetComponent = component.find('testChangeUI');
if($A.util.hasClass(targetComponent, 'changeUI')) {
$A.util.removeClass(targetComponent, 'changeUI');
}
},
toggleStyle : function(component, event, helper) {
var targetComponent = component.find('testChangeUI');
$A.util.toggleClass(targetComponent, 'changeUI');
}
})

结果展示:

当点击Add Style 以后会显示红色背景,点击Remove Style 以后会将红色背景移除,点击Toggle Style将会切换这个样式的显示/隐藏。

三. $A

$A 代表Aura Framework 命名空间,包含了以下函数。

1.createComponent (String type,Object attributes,function callback):用于动态创建元素组件主要有三个参数。

type: 想要动态创建的元素组件的类型,可以是Aura Framework中提供的标准的元素组件,也可以是自己自定义的元素组件;

attributes:想要给元素组件传的参数以及对应的value信息,此参数类型为map;

callback:  回调函数去通知调用者,返回的内容为刚刚创建的元素组件。

这里有两个例子,一个例子为创建标准的元素组件,一个是自定义的元素组件(这里有demo:https://www.cnblogs.com/zero-zyq/p/9630835.html)

$A.createComponent("aura:text",{value:'Hello World'}, function(auraTextComponent, status, statusMessagesList){
// auraTextComponent is an instance of aura:text containing the value Hello World
});

这个官方的demo代表调用此段逻辑会创建一个aura:text组件,组件有一个value的attribute,他的值为Hello World;

2.createComponents (Array components,function callback):和上面的方法区别为创建一组元素组件;

$A.createComponents([
["aura:text",{value:'Hello'}],
["ui:button",{label:'Button'}],
["aura:text",{value:'World'}]
],function(components,status,statusMessagesList){
// Components is an array of 3 components
// 0 - Text Component containing Hello
// 1 - Button Component with label Button
// 2 - Text component containing World
});

3.enqueueAction (Action action,Boolean background):将action 排队执行;

4.get (String key,function callback):使用属性语法返回值得引用。通常用于通过指定的Global Value Provider获取值的引用。Global Value Provider通常有三种:

$Browser:  用于返回当前的硬件或者访问当前应用的浏览器的信息;

$Locale: 用于返回当前用户的首选的地址;

$Resource: 用于返回你上传的静态资源,可以包括 style / image / javascript 等。

除了这三种常用的Global Value Provider, $A.get()还可以有很多的用法,比如

1)$A.get("$Label.namespace.labelName")用于获取你上传的custom label的值,如果没有自己声明namespace,默认为c;

2)Event中也封装了一些常用的 Global的方法,如下链接所示:https://developer.salesforce.com/docs/component-library/bundle/force:closeQuickAction/documentation, 这些方法也可以使用 $A.get("e.force.方法名称")去声明一个值的引用。

关于 $A的其他方法请自行查看。

总结:篇中主要写了一些我练习lightning时遇到的常用的方法,写的并不深入。如果想要深入的了解还请自己查看文档。篇中有错误的地方欢迎指出,有不懂得欢迎留言相互交流。有不完善的地方还请指出。

salesforce lightning零基础学习(十) Aura Js 浅谈三: $A、Action、Util篇的更多相关文章

  1. salesforce lightning零基础学习(八) Aura Js 浅谈一: Component篇

    我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v.label','xxValue'); ...

  2. salesforce lightning零基础学习(九) Aura Js 浅谈二: Event篇

    上一篇介绍了Aura Framework中 Component类的部分方法,本篇将要介绍Event常用的方法. 1. setParam (String key , Object value):设置事件 ...

  3. salesforce lightning零基础学习(十四) Toast 浅入浅出

    本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:showToast/specification h ...

  4. salesforce lightning零基础学习(十五) 公用组件之 获取表字段的Picklist(多语言)

    此篇参考:salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) 我们在lightning中在前台会经常碰到获取pi ...

  5. salesforce lightning零基础学习(十一) Aura框架下APP构造实现

    前面的一些lightning文章讲述了aura的基础知识,aura封装的常用js以及aura下的事件处理.本篇通过官方的一个superbadge来实现一个single APP的实现. superbad ...

  6. salesforce lightning零基础学习(十二) 自定义Lookup组件的实现

    本篇参考:http://sfdcmonkey.com/2017/01/07/custom-lookup-lightning-component/,在参考的demo中进行了简单的改动和优化. 我们在ht ...

  7. salesforce lightning零基础学习(十六) 公用组件之 获取字段label信息

    我们做的项目好多都是多语言的项目,针对不同国家需要展示不同的语言的标题.我们在classic中的VF page可谓是得心应手,因为系统中已经封装好了我们可以直接在VF获取label/api name等 ...

  8. salesforce lightning零基础学习(十七) 实现上传 Excel解析其内容

    本篇参考: https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader https://github.com/SheetJS/sheetjs ...

  9. salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型

    看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过cla ...

随机推荐

  1. 698. Partition to K Equal Sum Subsets 数组分成和相同的k组

    [抄题]: Given an array of integers nums and a positive integer k, find whether it's possible to divide ...

  2. SpringMCVC拦截器不拦截静态资源

    SpringMCVC拦截器不拦截静态资源 SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下 ...

  3. Eclipse设置智能提示

    1.解决智能感知提示响应时间,使Eclipse追上VS的响应步伐:Window→Preferences→Java→Editor→Content Assist 这里的Auto activation de ...

  4. Difference Among Mercedes Star Diagnostic Tool MB Star C3 C4 C5 C6

    Mercedes Star Diagnostic Tool newly update to MB Star C6.There are many star diangostic tool in the ...

  5. 转载-对js中new、prototype的理解

    说明:本篇文章是搜集了数家之言,综合的结果,应向数家致谢 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: <script type="text/java ...

  6. mybatis 插入数据 在没有commit时 获取主键id

      <insert id="insert" parameterType="Mail" useGeneratedKeys="true" ...

  7. select和其元素options

    普通的select形式为: <select> <option>选中元素1</option> <option>选中元素2</option> & ...

  8. Linux 线程编程1.0

    在编译多线程程序的时候,需要连接libpthread文件: gcc pthread.c  -o  pthread  -lpthread: 所有线程一律平等,没有父子关系,线程属于进程. 创建线程用 p ...

  9. DevExpress--TreeList节点添加图片

    这个过程相对来说比较简单,网上也有不少资料,但是自己在做过之后为了记住,算是给自己写一个博客吧. 下面直接上具体的流程 1.前提 控件使用的都是DevExpress和winform的原生控件两种: 2 ...

  10. Lambda表达式where过滤数据

    使用Lambda的表达式来过滤符合条件的数据.下面的代码实现,是把字符阵列中,把名字长度等于3元素找出来. class Bv { public void LambdaExpression() { st ...