I want to show a table format for the Attachments section. I have the lookup and results data. Both have a common column of attachmentTypeId
. I want to show the attachment category description based on the id. In the ng-bind
I tried an attempt, it's not worked.
I am using a function in the ng-bind
, hope the approach is wrong, expect an alternate for the approach.
The attachmentLookup
contains the attachmentDesc
, attachmentTypeId
$scope.attachmentLookup = [{
"attachmentDesc": "Category One",
"attachmentTypeId": "1"
}, {
"attachmentDesc": "Category Two",
"attachmentTypeId": "2"
}, {
"attachmentDesc": "Category Three",
"attachmentTypeId": "3"
}, {
"attachmentDesc": "Category Four",
"attachmentTypeId": "4"
}, {
"attachmentDesc": "Category Five",
"attachmentTypeId": "5"
}];
And the attachmentDetails
data from the database as,
$scope.attachmentDetails = [{
"attachmentId": "001",
"fileName": "File Name 001",
"attachmentTypeId": "1"
}, {
"attachmentId": "003",
"fileName": "File Name 003",
"attachmentTypeId": "2"
}, {
"attachmentId": "005",
"fileName": "File Name 005",
"attachmentTypeId": "3"
}, {
"attachmentId": "007",
"fileName": "File Name 007",
"attachmentTypeId": "1"
}, {
"attachmentId": "009",
"fileName": "File Name 009",
"attachmentTypeId": "2"
}, {
"attachmentId": "011",
"fileName": "File Name 011",
"attachmentTypeId": "3"
}];
The HTML code as,
<table>
<thead>
<tr>
<th>File Name</th>
<th>|</th>
<th>Category</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="attachment in attachmentDetails">
<td> <span ng-bind="attachment.fileName"></span>
</td>
<td>|</td>
<td> <span ng-bind="getCatgoryName(attachment.attachmentTypeId)"></span>
</td>
</tr>
</tbody>
</table>
And the getCatgoryName
code from the controller is,
$scope.getCatgoryName = function (attachmentTypeId) {
angular.forEach($scope.attachmentLookup, function (attachemnt) {
if (attachemnt.attachmentTypeId === attachmentTypeId)
return attachemnt.attachmentDesc;
});
};
Sample Plunker: http://plnkr.co/edit/dZy5gW4q9CxWF2NszXYc
The angular. bind() Function in AngularJS is used to bind the current context to a function, but actually execute it at a later time. It can also be used in Partial Applications. Partial Applications is when you want to make a function but some of the arguments have been passed already.
The ng-bind directive tells AngularJS to replace the content of an HTML element with the value of a given variable, or expression. If the value of the given variable, or expression, changes, the content of the specified HTML element will be changed as well.
ngModel usually use for input tags for bind a variable that we can change variable from controller and html page but ngBind use for display a variable in html page and we can change variable just from controller and html just show variable.
The ngInit directive allows you to evaluate an expression in the current scope. This directive can be abused to add unnecessary amounts of logic into your templates. There are only a few appropriate uses of ngInit : aliasing special properties of ngRepeat , as seen in the demo below.
The brackets are dirty checked, therefore the function will be called for every $digest
.
This ng-bind
is a directive, it will use a watcher on what is being passed to ng-bind
.
Therefore, ng-bind
will only apply, when the passed variable or value does actually change.
With a function, you are not passing a variable, therefore it will not fire for every $digest
.
It is therefore, better to use brackets with a function call.
I have updated the plunker here: http://plnkr.co/edit/LHC2IZ0Qk9LOOYsjrjaf?p=preview
I have changed the HTML here:
<tr ng-repeat="a in attachmentDetails">
<td> <span>{{a.fileName}}</span></td>
<td>|</td>
<td> {{ getCatgoryName(a.attachmentTypeId) }}</td>
</tr>
The function has also been modified:
$scope.getCatgoryName = function(attachmentTypeId) {
var desc = "";
angular.forEach($scope.attachmentLookup, function(attachemnt) {
if (parseInt(attachemnt.attachmentTypeId) == attachmentTypeId)
desc = attachemnt.attachmentDesc;
});
return desc;
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With