0

我正在尝试使用以下方法过滤列表(在 list.html 中):

<div ng-repeat="event in events | filter:filter | orderBy:order">

我的 ListController 中有一个过滤器对话框

.controller('ListController', ['$scope', '$dialog', function($scope,$dialog) {
  $scope.filterDialog = function() {
      var dlg = $dialog.dialog({
          templateUrl: 'pages/filter.html',
          controller: 'FilterController'
      });
  };

}])

filter.html 包含:

<form id="filter-form">
  <fieldset>
    <legend>Filter</legend>
        <label>Name:</label>
        <input type="text" ng-model="filter.name">
        <label>Description:</label>
        <input type="text" ng-model="filter.description">
    <div id="sort_section">
        <label>Sort By:</label>
        <label class="radio">
            <input type="radio" name="sort_by" value="time" ng-model="order.time" ng-checked="true" /> Time
        </label>
        <label class="radio">
            <input type="radio" name="sort_by" value="distance" ng-model="order.name" /> Name
        </label>
    </div>
    <button type="submit" class="btn" ng-click="close(filter,order)">Submit</button>
  </fieldset>
</form>

它似乎没有与列表绑定,因此列表没有过滤。
我在这里想念什么?

更新
我更改了上面的代码(向 ng-click="close()" 调用添加了参数),
我注意到只有当我删除type="radio" 部分时,我才能得到“订单”。

更新
这是ng-checked="true"一块,一旦取下,我就得到了过滤器。

4

1 回答 1

0

您在这里有两个不同的控制器:ListController 和 FilterController

您尝试使用的“过滤器”属于FilterController的范围,您不能直接在ListController中访问它。

所以你需要一个服务来保存“过滤器”,这样我们就可以在两个控制器中使用它:

服务.js

app.factory('filterData', function() {
  var filter = {        
    name: "abc"
  };    
  return filter;
});

在两个控制器中使用它

列表控制器

app.controller('ListController', function($scope, filterData) {
  $scope.filter = filterData;
});

过滤控制器

app.controller('FilterController', function($scope, filterData) {
  $scope.filter = filterData;
});
于 2013-08-07T10:53:51.107 回答