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

本篇中的组件主要有以下几个功能:

1. 当输入两位以上字符情况下,从后台数据库检索并且放在搜索框列表中展示;

2. 当选中搜索框列表中某个指定的单元后,选中的单元会以pill的方式展示在输入框中,同时输入框隐藏,列表选择框隐藏;

3. 删除选中的单元以后,输入框变成可用状态。

 

实现方式如下:


包打开的结构如下:

2. 创建svg.component,用于显示slds提供的icon

svg.component

1
2    
3    
4    
5

svgRenderer.js

复制代码
 1 ({
 2     render: function(component, helper) {
 3         var classname = component.get("v.class");
 4         var xlinkhref = component.get("v.xlinkHref");
 5         var ariaHidden = component.get("v.aria-hidden");
 6  
 7         var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
 8         svg.setAttribute('class', classname);
 9         svg.setAttribute('aria-hidden', ariaHidden);
10         svg.innerHTML = '';
11         return svg;
12     }
13 })
复制代码
 3. selectedObjectEvent.evt:用于当搜索出来的列表选中某个指定的单元后,传递给父组件。

1
2    
3

4. customLookUpResult.cmp:用于显示搜索出来的结果的每个单元的展示组件,当选中单元后触发上面的事件。

复制代码
 1
 2    
 3    
 4    


  •  5        
     6            

     7                
    {!v.selectedObj.Name}
     8                

     9            

    10        

    11    

  • 12
    复制代码
    customLookUpResultController.js

    复制代码
    1 ({
    2     selectObject : function(component, event, helper){      
    3         var selectedObject = component.get("v.selectedObj");
    4         var compEvent = component.getEvent("selectedObjectEvent");
    5         compEvent.setParams({"objectByEvent" : selectedObject});  
    6         compEvent.fire();
    7     }
    8 })
    复制代码
    5. customLookUp.cmp :主要包括几部分主要内容:

    根据传递过来的 object 的API Name获取Label动态显示搜索的 object的Label信息;
    展示搜索按钮,搜索后触发controller的handler来控制后台结果集的展示;
    搜索时spinner的展示和隐藏;
    移除选中的单元后,启用输入状态等。
    复制代码
     1
     2   
     3    
     4    
     5    
     6 
     7    
     8 
     9    
    10 
    11    
    12 
    13    
    14 
    15    
    16     
    17    
    18 
    19    
    20 
    21    
    22 
    23    
    24   
    25    


    26      

    27          
    28 
    29          

    30            

    31                
    32 
    33                

    34                  
    35                      
    36                        {!v.selectedRecord.Name} 
    37                      

    38                      
    42                  

    43                

    44              

    45                
    46              
      
    47            

    48          

    49 
    50          

    51            
    {!v.Message}

    52            

    53            

      54                
      55                  
      56                

      57            

    58          

    59      

    60    

    61
    复制代码
    customLookUpController.js

    复制代码
     1 ({
     2     initialData : function(component,event,helper) {
     3         var action = component.get('c.getObjectLabelByObjectName');
     4         action.setParam('objName', component.get('v.objectType'));
     5         action.setCallback(this, function(response) {
     6             if(response.getState() === 'SUCCESS') {
     7                 component.set('v.objectLabel', response.getReturnValue());
     8             }
     9         });
    10         $A.enqueueAction(action);
    11     },
    12 
    13     fetchResultHandler : function(component, event, helper) {
    14         var keyWord = component.get("v.SearchKeyWord");
    15         var resultListDiv = component.find(www.yunshengpt.com"searchRes");
    16         if( keyWord.length > 2){
    17             $A.util.addClass(resultListDiv, 'slds-is-open');
    18             $A.util.removeClass(resultListDiv, 'slds-is-close');
    19             helper.searchHelper(component,event,keyWord);
    20         }
    21         else{  
    22             component.set("v.searchObjList", null ); 
    23             $A.util.addClass(resultListDiv, 'slds-is-close');
    24             $A.util.removeClass(resultListDiv, 'slds-is-open');
    25           }
    26     },
    27   
    28     clearSelectedHandler :function(component,event,heplper){
    29       
    30          var pillTarget = component.find("lookup-pill");
    31          var lookUpTarget = component.find("lookupField"); 
    32         
    33          $A.util.addClass(pillTarget, 'slds-hide');
    34          $A.util.removeClass(pillTarget, 'slds-show');
    35         
    36          $A.util.addClass(lookUpTarget, 'slds-show');
    37          $A.util.removeClass(lookUpTarget, 'slds-hide');
    38       
    39          component.set("v.SearchKeyWord",null);
    40          component.set("v.searchObjList", null );
    41     },
    42     
    43   
    44     selectedObjectHandler : function(component, event, helper) {
    45           
    46         var selectedObject = event.getParam("objectByEvent");
    47         component.set("v.selectedRecord" , selectedObject); 
    48         var pillDiv = component.find("lookup-pill");
    49         $A.util.addClass(pillDiv, 'slds-show');
    50         $A.util.removeClass(pillDiv, 'slds-hide');
    51 
    52         var resultListDiv = component.find("searchRes");
    53         $A.util.addClass(resultListDiv,www.078881.cn 'slds-is-close');
    54         $A.util.removeClass(resultListDiv, 'slds-is-open');
    55 
    56         var lookUpTarget = component.find("lookupField");
    57         $A.util.addClass(lookUpTarget, 'slds-hide');
    58         $A.util.removeClass(lookUpTarget, 'slds-show');  
    59       
    60     },
    61 
    62     hideSpinner : function (component, event, helper) {
    63         var spinner = component.find(www.huarenyl.cn'spinner');
    64         var evt = spinner.get("e.toggle");
    65         evt.setParams({ isVisible : false });
    66         evt.fire();    
    67     },
    68 
    69     showSpinner : function (component, event, helper) {
    70         var spinner = component.find('spinner');
    71         var evt = spinner.get("e.toggle");
    72         evt.setParams({ isVisible : true });
    73         evt.fire();    
    74     }
    75     
    76 })
    复制代码
    customLookUpHelper.js

    复制代码
     1 ({
     2     searchHelper : function(component,event,getInputkeyWord) {
     3         var action = component.get(www.365soke.com"c.fetchObjectList");
     4         action.setParams({
     5             'keyWord': getInputkeyWord,
     6             'objectName' : component.get('v.objectType')
     7         });
     8    
     9         action.setCallback(this, function(response) {
    10             var state = response.getState();
    11             if (state === "SUCCESS") {
    12                 var resValue = response.getReturnValue();
    13                 if (resValue.length == 0) {
    14                     component.set("v.Message", 'No Result Found.');
    15                 } else {
    16                     component.set("v.Message", 'Search Result As Follows.');
    17                 }
    18                 
    19                 component.set("v.searchObjList", resValue);
    20             }
    21         });
    22         $A.enqueueAction(action);
    23     }
    24 })
    复制代码
    6. 放在APP 里面调用

    TestCustomLookUpApp.app

    1
    2    
    3    
    4    
    5

    TestCustomLookUpAppController.js

    1 ({
    2     showInformation : function(component, event, helper) {
    3         alert(component.get('v.selectedUser'www.honghgjpt.com).Id);
    4     }
    5 })
    结果展示:通过组件可以直接根据selectedUser获取选中的User的Id等信息。

     总结:篇中只是简单的进行封装功能,并且只允许单选,对于多选感兴趣的可以实现。改动的点不是很多。篇中有错误的地方欢迎指出,不懂的欢迎留言。

    你可能感兴趣的:(salesforce lightning零基础学习(十二) 自定义Lookup组件的实现)