我设法计算用户当前地理坐标和对象地理坐标之间的距离,这是工作plunker。如何从最小值到最高值对ng-repeat
进行排序?
使用简单表达式的orderBy
过滤器很容易,但这个打印距离的表达式有点棘手!谢谢。
HTML:
<div data-ng-controller="restaurantlistController" >
<div ng-repeat="restaurant in restaurantList | orderBy: 'distance'" href="#">
<article class="item_frame">
<div class="marker_left_container">
<span class="venu_type_text">{{restaurant.venueType}}</span>
<span class="distance_from_user_rest"> distance: {{distanceTo(restaurant)}}</span>
<span class="distance_from_user_rest2">from current location</span>
</div>
<div class="restaurant_details_container">
<h1 class="restaurant_name_inlist">{{restaurant.Name}}</h1>
<span class="restaurant_detail_inlist2">{{restaurant.subCuisine}} <br />
{{restaurant.subsubCuisine}}</span>
<span class="restaurant_address">{{restaurant.address}}, <br />
</span>
<span class="restaurant_address">{{restaurant.cp}}, {{restaurant.city}} <br />
</span>
<span class="restaurant_others">{{restaurant.phoneNumber}} <br />
</span>
<span class="restaurant_others">{{restaurant.website}} <br />
</span>
<span>-------------------------------------------------</span>
</div>
</div>
</article>
<!--main article frame 1 -->
</div>
答案 0 :(得分:0)
您可以只对数组进行排序,而不是使用orderBy:
$scope.restaurantList.sort(function(a,b) { return someDistanceFunction(a,b) } );
答案 1 :(得分:0)
在您的控制器中,您应该将distanceTo功能更新为以下内容:
$scope.distanceTo = function(restaurant) {
var distance = GreatCircle.distance( restaurant.long,restaurant.lat, position.longitude, position.latitude)
restaurant.distance = distance;
return distance;
}
现在你的过滤器应该有效,因为它正在检查restaurant.distance属性。
答案 2 :(得分:0)
如何将distanceTo
函数作为orderBy
谓词:
<div ng-repeat="restaurant in restaurantList | orderBy:distanceTo" href="#">
通过表达式谓词对指定的数组进行排序。
比较器用来确定顺序的谓词 元件。
可以是以下之一:
- 功能:Getter功能。此功能的结果将被排序 使用&lt;,===,&gt;操作者。