Javascript Angular.js:如何让orderBy或filter从无序列表中工作?

Javascript Angular.js:如何让orderBy或filter从无序列表中工作?,javascript,angularjs,Javascript,Angularjs,尝试根据价格和评级进行排序(在返回的对象中)。我宁愿用鼠标点击鼠标,也不愿用选择菜单。这有可能吗?我一直在四处寻找,这是我找到的最接近的 <ul class="restaurant-filter"> <li> <i class="icon-search"></i>Organize results by "Price" &amp; "Rating"&hellip; <ul ng-m

尝试根据价格和评级进行排序(在返回的对象中)。我宁愿用鼠标点击鼠标,也不愿用选择菜单。这有可能吗?我一直在四处寻找,这是我找到的最接近的

    <ul class="restaurant-filter">
        <li> <i class="icon-search"></i>Organize results by "Price" &amp; "Rating"&hellip;
            <ul ng-model="priceAndRating">
                <li ng-click="price">Price</li>
                <li ng-click="rating">Rating</li>
            </ul>
        </li>
    </ul>

    <ul class="available-restaurants">
        <li ng-repeat="restaurant in availableRestaurants | orderBy:priceAndRating" ng-click="addRestaurantToEvent(restaurant.restaurantName)">
            <h6>{{restaurant.restaurantName}}</h6>
            <p>label one two three for five six</p>

            <i class="icon-chevron-right"></i>                    
        </li>
    </ul>
  • 按“价格”组织结果&;“评级”&hellip;
      价格 评级
  • {{餐厅.餐厅名称} 五六换一二三


可用的备用设备是我的目标。

你没有给我们你的数据或控制器的结构,所以我只做了一个简单的,满足你的需要。这是

注意:
ng单击
需要调用函数或执行一些代码。您可以编写一个函数文本来设置属性,但这是将控制器逻辑混合到视图中(想想如果以后需要更改排序,您需要在视图中更新该逻辑,这是不好的)

我添加了一个排序函数来处理这个问题,它只接受属性。您可以根据需要进行设置

HTML:


我已将您的代码复制并粘贴到小提琴中:

ng click需要做一些事情,它不必像Tyrsius断言的那样调用函数,但它应该执行一些代码。正如您在我的小提琴中看到的,我正在根据您单击的内容在名为
order='price'
'rating'
的范围上设置一个属性

然后您将
orderBy:order
,它将$eval$scope.order中的任何内容,这是通过单击设置的


我希望这会有所帮助。

不确定是否需要创建函数,或者是否可以在前端处理。这个效果很好!非常感谢。这是处理多种排序方法的好方法!这也是一个很好的答案!帮助我了解更多正在发生的事情。谢谢这就是我所说的函数文字(从技术上讲不是,而是角度将其转换为函数),我认为这通常是一种不好的做法。对于复杂的交互?当然,可能是“坏习惯”。。。但即使Angular的例子也使用文字表达。对于非常简单的交互,如设置变量,只需单击鼠标即可执行更少的代码和更少的函数引用。
<div ng-app="miniapp">
    <div ng-controller="Ctrl1">
        <ul class="restaurant-filter">
        <li> <i class="icon-search"></i>Organize results by "Price" &amp; "Rating"&hellip;
            <ul>
                <li ng-repeat="option in sortOptions" ng-click="setSort (option)">{{option}}</li>
            </ul>
        </li>
    </ul>

    <ul class="available-restaurants">
        <li ng-repeat="r in availableRestaurants | orderBy:sort">
            <span>{{r.name}} - {{r.rating}}</span>                  
        </li>
    </ul>
    </div>
</div>​
function Ctrl1($scope) {
    $scope.sortOptions = ["Price", "Rating"];
    $scope.sort = "Price";
    $scope.setSort = function(type) { $scope.sort = type.toLowerCase(); };
    $scope.availableRestaurants = [{name: "Chevy's", rating: 6, price: 6},
                                  {name: "Burger King", rating: 2, price: 1},
                                  {name: "Red Robin", rating: 4, price: 4},
                                  {name: "Carl's Jr", rating: 5, price: 2}];
}