2015-08-03 3 views
0

я сделать собственную директиву с изолированной сферы и получить данные также в этой директиве, но теперь мой фильтр и OrderBy не работает вот моя директива:Как использовать фильтр и orderby с изолированной директивой?

<div my-data remoteurl='url' filter='test'> 
    </div> 

Контроллер:

(function() { 

'use strict'; 

    var myApp = angular.module('myApp', []) 
    .controller('myAppCtrl', ['$scope', '$http', function($scope, $http) { 
    $scope.url = 'https://www.reddit.com/r/worldnews/new.json'; 
    $scope.filter= 'test'; 
    $scope.orderBy= 'sortExpression'; 
}]) 
.directive('myData', ['$http', function($http) { 
    return { 
    restrict: 'A', 
    scope: { 
     remoteurl: '=', 
     filter: '=', 
     orderBy: '=' 
    // orderBy:'sortExpression':'order' ; 
    }, 
    templateUrl: 'DataTable.html', 
    link: function(scope, element, attr) { 

     $http.get(scope.remoteurl) 
     .success(function(response) { 
      scope.names = response.data.children; 
     }); 
    } 
    }; 
}]); 

}) ();

DataTable.html

<ul> 
    <li > 
    <table width="80%" id="dataTable" align="center" name="table1"> 
     <tr> 
      <td><strong>Title</strong></td> 
      <td><strong>Link</strong></td> 
      <td><strong>Score</strong></td> 
     </tr> 
     <tr ng-repeat="x in names |filter:test|orderBy:sortExpression:order "> 

      <td id="title"><a ng-href="{{ x.data.url}}">{{x.data.title}}</a></td> 
      <td ><a ng-href="{{ x.data.url}}">Link</a></td> 
      <td>{{x.data.score}}</td> 
     </tr> 
    </table> 
</li> 

Я передаю все параметры, но только URL работает фильтр и OrderBy не работают кто может исправить меня?

+1

Я предполагаю, что ваш тр должен выглядеть следующим образом: '<тр нг-повтора = "х в названиях | фильтр: фильтр | OrderBy: OrderBy">'. Попробуйте. В следующий раз было бы лучше, если бы вы могли подготовить Plnkr, чтобы другие могли непосредственно исследовать код. См. [Http://plnkr.co] (http://plnkr.co) -> Новый -> Угловой 1.x – ilmgb

+0

@ilmgb его работающий, но как можно делать asc и desc? – Hassan

+0

См. Угловые документы на странице [https://docs.angularjs.org/api/ng/filter/orderBy](https://docs.angularjs.org/api/ng/filter/orderBy). В нем указано: «Выражение может быть необязательно префикс + или - для управления возрастающим или убывающим порядком сортировки (например, + name или -name). Если свойства не предоставлены (например,« + »), то сам элемент массива используется для сравнения, где сортировка. " – ilmgb

ответ

2

Это не имеет никакого отношения к изолированному пространству. В общем, вы передаете переменные правильным образом - от контроллера в директиве через = -нотацию.

Вы забыли передать заказ в соответствии с директивой, а также понять, как фильтры и порядок в целом работают. Пожалуйста, ознакомьтесь с документацией для filter и orderBy и посмотрите на примеры.

Исправленный директивный код, теперь с указанием контроллера. Переменная области видимости, переданная в директиву.

<div my-data remoteurl='url' filter='test' order-by="orderBy"> 
</div> 

Как я уже заметил, ваши строки таблицы код должен выглядеть следующим образом:

<tr ng-repeat="x in names | filter:filter | orderBy:orderBy"> 

В контроллере я настроил следующий фильтр и строки OrderBy.

$scope.filter= 'obama'; 
$scope.orderBy= '-data.score'; //the "-" stands for reverse ordering 

При определении фильтра, как этот filter:test фильтр основан на переменной области видимости называется тест, например, $scope.test. В вашей области действия фильтр находится внутри переменной области $scope.filter, поэтому правильный вызов вашего фильтра - filter:filter.

Я создал рабочую plnkr здесь: http://plnkr.co/edit/FGZVaPrvbUcdvNRnKMk4?p=preview

Смежные вопросы