2014-11-01 6 views
15

सशर्त कैसे जोड़ने के लिए जब नीचे ui-grid cellTemplate में डेटा दिखाने AngularJS:ui ग्रिड में सशर्त सेल टेम्पलेट

$scope.status = ['Active', 'Non Active', 'Deleted']; 
$scope.gridOptions = { 
    columnDefs: [{ 
     field: 'code' 
    }, { 
     field: 'name' 
    }, { 
     field: 'status', 
     cellTemplate: '<div>{{status[row.entity.status]}}</div>' 
    }] 
}; 

अपेक्षित परिणाम पंक्ति स्थिति शो Active/NonActive/Deleted होना चाहिए।

यहाँ plunker

अग्रिम धन्यवाद है।

उत्तर

27

आपको externalScopes का उपयोग करना होगा।

अपने मार्कअप में इस तरह ग्रिडहोल्डर को परिभाषित करें।

<div ui-grid="gridOptions" external-scopes="states" class="grid"></div> 

और अपने नियंत्रक उपयोग इस कोड में:

var statusTxt = ['Active', 'Non Active', 'Deleted']; 

$scope.states = { 
    showMe: function(val) { 
    return statusTxt[val]; 
    } 
}; 

var statusTemplate = '<div>{{getExternalScopes().showMe(row.entity.status)}}</div>'; 
$scope.gridOptions = { 
    columnDefs: [{ 
    field: 'code' 
    }, { 
    field: 'name' 
    }, { 
    field: 'status', 
    cellTemplate: statusTemplate 
    }] 
}; 

या एक कोणीय फिल्टर का उपयोग करें।

ध्यान दें कि यह केवल पाठ प्रस्तुत करता है। Ui-grid में इसका उपयोग करने से पहले वास्तविक टेक्स्ट स्टेटस रखने के लिए myData को बदलने का सबसे अच्छा तरीका होगा। बस अगर आप बाद में कुछ पाठ आधारित फ़िल्टरिंग करना चाहते हैं।

खाका इस तरह दिखता है:

var statusTemplate = '<div>{{COL_FIELD == 0 ? "Active" : (COL_FIELD == 1 ? "Non Active" : "Deleted")}}</div>'; 

यहाँ plunker है:

यहाँ एक Plunker

+21

(3.0.0RC18) 'getExternalScopes()' काम नहीं कर रहा उपयोग 'grid.appScope' बजाय, इस तरह:' वर statusTemplate = '

{{grid.appScope.states.showMe(row.entity.status)}}
'; ' – klode

+0

मैं उपयोग कर रहा हूँ" ui ग्रिड - v3.0.0-RC.18 - 2014-12-09 "और getExternalScopes() अपेक्षित के रूप में काम कर रहा है। – timtos

+4

ध्यान रखें कि वे लोग इस गेंद को रोल करने के लिए कड़ी मेहनत कर रहे हैं। जैसा कि आप देख सकते हैं (प्रलेखन में) बाहरी क्षेत्रों के लिए ट्यूटोरियल चला गया है और इसे एक http://ui-grid.info/docs/#/tutorial/305_appScope द्वारा प्रतिस्थापित किया गया था। आरसी का मतलब रिलीज उम्मीदवार है और पूरा संस्करण नहीं है। आपकी टिप्पणी के लिए – mainguy

13

मैं बाहरी कार्यक्षेत्रों का उपयोग किए बिना आप के लिए एक और समाधान मिल गया है है http://plnkr.co/edit/OZtU7GrOskdqwHW5FIVz?p=preview

+0

हाँ, यह अच्छा है!हालांकि मुझे अभी भी लगता है कि डेटा तैयार करना सबसे अच्छा तरीका है। कई राज्यों के साथ यह एक लंबा टेम्पलेट में बदल सकता है। फिर भी: +1 – mainguy

+0

हाँ, आप बहुत सही हैं। और मैं सोच रहा था कि क्या करना है, अगर यह अधिक जटिल हो जाता है। तो मुझे खुशी है कि मुझे आपका उत्तर ऊपर मिला! – nabinca

+0

यह काम करता है। इसके अलावा यह मेरे [प्रश्न] का उत्तर देता है (http://stackoverflow.com/questions/36070340/set-cell-value-based-on-a- शर्त) – faizanjehangir

10

हमें ई cellFilter

columnDefs: [{ 
    field: 'code' 
}, { 
    field: 'name' 
}, { 
    field: 'status', 
    cellFilter: 'mapStatus' 
}] 


app.filter('mapStatus', function() { 

    var statusMap = ['Active', 'Non Active', 'Deleted']; 

    return function(code) { 
     if (!angular.isDefined(code) || code < 0 || code > 2) { 
      return ''; 
     } else { 
      return statusMap[code]; 
     } 
    }; 
}); 

plunker

+0

कूल सामान! यदि मैं मूल्य के आधार पर शैली को बदलने की ज़रूरत नहीं है, तो मैं निश्चित रूप से इसका उपयोग करूंगा। – nabinca

17

मैं ng-if उपयोग करने के लिए इस समस्या को हल सुझाव है।

$scope.gridOptions = { 
    columnDefs: [{ 
     field: 'code' 
    }, { 
     field: 'name' 
    }, { 
     field: 'status', 
     cellTemplate: '<div ng-if="row.entity.status == 0">Active</div><div ng-if="row.entity.status == 1">Non Active</div>' 
    }] 
}; 
+1

सरल समाधान एनजी-अगर –

+0

ऊपर दिया गया मीठा और सरल समाधान का उपयोग करना है !! –

3

आपको अपना टेम्पलेट बदलना होगा। जब आप कोणीय-यूई-ग्रिड में बाहरी क्षेत्रों का जिक्र कर रहे हैं तो आप grid.appScope का उपयोग कर सकते हैं।

var statusTemplate = '<div>{{grid.appScope.status[row.entity.status]}}</div>'; 
+0

मेरा मतलब था var statusTemplate = '

{{grid.appScope.status[row.entity.status]}}
'; –

0

स्क्रिप्ट के नीचे आज़माएं। यह मेरे लिए काम कर रहा है।

app.controller('MainCtrl', ['$scope', 
    function($scope) { 

    var statusTxt = ['Active', 'Non Active', 'Deleted']; 

$scope.showMe= function(val) { 
    return statusTxt[val]; 
    }; 

var statusTemplate = '<div>{{grid.appScope.showMe(row.entity.status)}}</div>'; 
$scope.gridOptions = { 
    columnDefs: [{ 
    field: 'code' 
    }, { 
    field: 'name' 
    }, { 
    field: 'status', 
    cellTemplate: statusTemplate 
    }] 
}; 

$scope.gridOptions.data = [{ 
    "code": "Cox", 
    "name": "Carney", 
    "status": 0 
}, { 
    "code": "Lorraine", 
    "name": "Wise", 
    "status": 1 
}, { 
    "code": "Nancy", 
    "name": "Waters", 
    "status": 2 
    }]; 
    } 
]); 
अब तक
संबंधित मुद्दे