我一直试图制作一份地理位置列表,每种都有税(不是所有税都适用于所有地理位置)。
所以我对geozones进行了ng-repeat,并在每个内部进行了一次ng-repeat和所有税收。问题是我不知道如何发送此时正在过滤的地理区域的ID。这是现在的代码:
<md-option ng-repeat="tax in taxClasses | filter: filterTax" value="{{ '{{ tax.id }}' }}">{{ '{{ tax.name }}' }}</md-option>
和JS:
$scope.filterTax = function(tax, n){
angular.forEach(tax.geoZone , function(geo){
if(geo === $scope.prices[n].geozoneId){
return true;
}
});
return false;
};
需要n作为地理区域的索引,或类似的东西。提前谢谢!
答案 0 :(得分:1)
您的想法并不遥远,但使用filter:
甚至不是必需的,因为管道|
已经是filter
命令:
ng-repeat="<var> in <array> | <filterFunction>:<...arguments>"
因此,您可以创建过滤器(有关详细信息,请参阅https://docs.angularjs.org/guide/filter)
ng-repeat="tax in taxClasses | filterTax: <geozoneIndex>"
集合中的值将作为filterTax
函数的第一个参数传递。任何进一步的参数都以冒号:
分隔。
使用它时,必须传播这样的过滤方法:
app.module(...).filter('filterTax', function(/* injected services */) {
return function (/* arguments */ input, geozoneIndex) {
// function body
}
});
或者使用范围内的过滤功能:
// template
ng-repeat="tax in filterTaxes(taxClasses, <geozoneIndex>)"
// script
$scope.filterTaxes = function(taxClasses, geozoneIndex) {
// do the whole filtering, but return an array of matches
return taxClasses.filter(function(taxClass) {
return /* in or out code */;
});
};
这意味着您的geozoneIndex
可能是固定值,也可能是从该变量中提取的filterTax
。
请注意,您的MODULE ORBITCANDY
IMPLICIT NONE
PRIVATE
TYPE(Cart_typ)
REAL*8 X
REAL*8 Y
REAL*8 Z
END TYPE Cart_typ
PUBLIC :: Cart_Typ
TYPE(OE_typ)
REAL*8 EC
REAL*8 A
REAL*8 IC
REAL*8 OM
REAL*8 W
REAL*8 TA
END TYPE OE_typ
PUBLIC :: OE_Typ
PUBLIC :: OE2CART
CONTAINS
function OE2Cart(OE)
implicit none
TYPE(OE_Typ) , INTENT(IN ) :: OE
TYPE(Cart_Typ) :: OE2Cart
real*8 :: EC, A, IC, OM, W, TA
real*8 :: XCARTISIAN, r
EC = OE%EC
A = OE%A
IC = OE%IC
OM = OE%OM
W = OE%W
TA = OE%TA
OE2Cart%X = XCARTISIAN(EC, A, IC, OM, W, TA)
OE2Cart%Y = YCARTESIAN(EC, A, IC, OM, W, TA)
OE2Cart%Z = ZCARTESIAN(EC, A, IC, OM, W, TA)
RETURN
END FUNCTION OE2CART
!%%%%%%%%%%%%%%
real*8 function YCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
TYPE(OE_Typ) , INTENT(IN ) :: OE
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: XCARTISIAN, r
r = A(1-EC**2)/(1+EC*COS(TA))
XCARTISIAN = r(COS(OM)*COS(W+TA)-SIN(OM)*SIN(W+TA)*COS(IC))
return
end function XCARTISIAN
!%%%%%%%%%%%%%%
real*8 function YCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: YCARTISIAN
r = A(1-EC**2)/(1+EC*COS(TA))
YCARTISIAN = r(SIN(OM)*COS(W+TA)+COS(OM)*SIN(W+TA)*COS(IC))
return
end function YCARTISIAN
!%%%%%%%%%%%%%%
real*8 function ZCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: ZCARTISIAN
r = A(1-EC**2)/(1+EC*COS(TA))
ZCARTISIAN = r(SIN(W+F)*SIN(IC)
return
end function ZCARTISIAN
END MODULE ORBITCANDY
功能将被称为很多,因此如果您的网页速度变慢,您可能需要考虑优化该过滤。