如何将 filter 和 orderby 与 isolated 指令一起使用?
how to use filter and orderby with isolated directive?
我创建了一个具有隔离范围的自定义指令,并且也在该指令中获取数据,但现在我的过滤器和 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 不工作,有人能纠正我吗?
与隔离作用域无关。通常,您以正确的方式传递变量 - 通过 =
符号从控制器传递到指令。
您忘记将 orderBy 传递给指令,也忘记了解过滤器和 orderBy 通常是如何工作的。请查看 filter and orderBy 的文档并查看示例。
更正了指令代码,现在将控制器的 orderBy 范围变量传递到指令中。
<div my-data remoteurl='url' filter='test' order-by="orderBy">
</div>
正如我已经评论过的,您的 table 行代码应该如下所示:
<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
过滤器基于名为 test 的范围变量,例如$scope.test
。在您的范围内,过滤器位于范围变量 $scope.filter
内,因此您的过滤器的正确调用是 filter:filter
.
我在这里设置了一个工作 plnkr:http://plnkr.co/edit/FGZVaPrvbUcdvNRnKMk4?p=preview
我创建了一个具有隔离范围的自定义指令,并且也在该指令中获取数据,但现在我的过滤器和 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 不工作,有人能纠正我吗?
与隔离作用域无关。通常,您以正确的方式传递变量 - 通过 =
符号从控制器传递到指令。
您忘记将 orderBy 传递给指令,也忘记了解过滤器和 orderBy 通常是如何工作的。请查看 filter and orderBy 的文档并查看示例。
更正了指令代码,现在将控制器的 orderBy 范围变量传递到指令中。
<div my-data remoteurl='url' filter='test' order-by="orderBy">
</div>
正如我已经评论过的,您的 table 行代码应该如下所示:
<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
过滤器基于名为 test 的范围变量,例如$scope.test
。在您的范围内,过滤器位于范围变量 $scope.filter
内,因此您的过滤器的正确调用是 filter:filter
.
我在这里设置了一个工作 plnkr:http://plnkr.co/edit/FGZVaPrvbUcdvNRnKMk4?p=preview