AngularJS ng-bind 函数
AngularJS ng-bind with a function
我想为附件部分显示 table 格式。我有查找和结果数据。两者都有一个共同的列 attachmentTypeId
。我想根据 id 显示附件类别描述。在 ng-bind
我尝试了一次尝试,但没有成功。
我正在使用 ng-bind
中的函数,希望该方法有误,希望有替代方法。
attachmentLookup
包含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"
}];
数据库中的 attachmentDetails
数据为,
$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"
}];
HTML代码为,
<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>
来自控制器的 getCatgoryName
代码是,
$scope.getCatgoryName = function (attachmentTypeId) {
angular.forEach($scope.attachmentLookup, function (attachemnt) {
if (attachemnt.attachmentTypeId === attachmentTypeId)
return attachemnt.attachmentDesc;
});
};
示例 Plunker:http://plnkr.co/edit/dZy5gW4q9CxWF2NszXYc
括号被脏检查,因此函数将在每个 $digest
.
被调用
这个 ng-bind
是一个指令,它将对传递给 ng-bind
的内容使用观察器。
因此,ng-bind
仅在传递的变量或值确实发生变化时适用。
使用函数时,您不会传递变量,因此它不会在每个 $digest
.
时触发
因此,最好在函数调用中使用括号。
我在这里更新了 plunker:http://plnkr.co/edit/LHC2IZ0Qk9LOOYsjrjaf?p=preview
我在这里更改了HTML:
<tr ng-repeat="a in attachmentDetails">
<td> <span>{{a.fileName}}</span></td>
<td>|</td>
<td> {{ getCatgoryName(a.attachmentTypeId) }}</td>
</tr>
函数也修改了:
$scope.getCatgoryName = function(attachmentTypeId) {
var desc = "";
angular.forEach($scope.attachmentLookup, function(attachemnt) {
if (parseInt(attachemnt.attachmentTypeId) == attachmentTypeId)
desc = attachemnt.attachmentDesc;
});
return desc;
};
做同样事情的另一种方法如下:
<tr ng-repeat="delivery in deliveries">
<td>{{delivery.pickup}}</td>
<td>{{delivery.destination}}</td>
<td>{{getVehicleDescription(delivery) || (delivery.isVehicleDescription ? delivery.modelType : delivery.vehicleType)}}</td></tr>
controller函数也修改成这样:
$scope.getVehicleDescription = function(delivery){
$scope.roads.map(function(road){
if(road.modelTypeID == delivery.vehicleType && !delivery.isVehicleDescription){
delivery.modelType = road.modelType;
delivery.isVehicleDescription = true;
}
})
};
我想为附件部分显示 table 格式。我有查找和结果数据。两者都有一个共同的列 attachmentTypeId
。我想根据 id 显示附件类别描述。在 ng-bind
我尝试了一次尝试,但没有成功。
我正在使用 ng-bind
中的函数,希望该方法有误,希望有替代方法。
attachmentLookup
包含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"
}];
数据库中的 attachmentDetails
数据为,
$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"
}];
HTML代码为,
<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>
来自控制器的 getCatgoryName
代码是,
$scope.getCatgoryName = function (attachmentTypeId) {
angular.forEach($scope.attachmentLookup, function (attachemnt) {
if (attachemnt.attachmentTypeId === attachmentTypeId)
return attachemnt.attachmentDesc;
});
};
示例 Plunker:http://plnkr.co/edit/dZy5gW4q9CxWF2NszXYc
括号被脏检查,因此函数将在每个 $digest
.
这个 ng-bind
是一个指令,它将对传递给 ng-bind
的内容使用观察器。
因此,ng-bind
仅在传递的变量或值确实发生变化时适用。
使用函数时,您不会传递变量,因此它不会在每个 $digest
.
因此,最好在函数调用中使用括号。
我在这里更新了 plunker:http://plnkr.co/edit/LHC2IZ0Qk9LOOYsjrjaf?p=preview
我在这里更改了HTML:
<tr ng-repeat="a in attachmentDetails">
<td> <span>{{a.fileName}}</span></td>
<td>|</td>
<td> {{ getCatgoryName(a.attachmentTypeId) }}</td>
</tr>
函数也修改了:
$scope.getCatgoryName = function(attachmentTypeId) {
var desc = "";
angular.forEach($scope.attachmentLookup, function(attachemnt) {
if (parseInt(attachemnt.attachmentTypeId) == attachmentTypeId)
desc = attachemnt.attachmentDesc;
});
return desc;
};
做同样事情的另一种方法如下:
<tr ng-repeat="delivery in deliveries">
<td>{{delivery.pickup}}</td>
<td>{{delivery.destination}}</td>
<td>{{getVehicleDescription(delivery) || (delivery.isVehicleDescription ? delivery.modelType : delivery.vehicleType)}}</td></tr>
controller函数也修改成这样:
$scope.getVehicleDescription = function(delivery){
$scope.roads.map(function(road){
if(road.modelTypeID == delivery.vehicleType && !delivery.isVehicleDescription){
delivery.modelType = road.modelType;
delivery.isVehicleDescription = true;
}
})
};