Javascript 如果在angular.js中,检测$last的指令不适用于ng
我正在使用angular.js和jquery制作新闻提要页面 我正在使用指令检测要显示的最后一个提要。当它返回Javascript 如果在angular.js中,检测$last的指令不适用于ng,javascript,jquery,angularjs,angularjs-directive,directive,Javascript,Jquery,Angularjs,Angularjs Directive,Directive,我正在使用angular.js和jquery制作新闻提要页面 我正在使用指令检测要显示的最后一个提要。当它返回scope.$last==true时,我调用一个函数来执行一些Jquery动画 然后,我将一个ng模型showYear按日期添加到文件管理器元素中,并将ng if添加到过滤器元素中 我的问题是,当最后一个元素被ng过滤(如果未渲染)时, 指令无法检测范围。$last并运行feedPosition() 我试着像下面的url那样做,但它面临同样的问题: 请帮忙 这是我的密码: HTML:
scope.$last==true
时,我调用一个函数来执行一些Jquery动画
然后,我将一个ng模型showYear
按日期添加到文件管理器元素中,并将ng if
添加到过滤器元素中
我的问题是,当最后一个元素被ng过滤(如果
未渲染)时,
指令无法检测范围。$last
并运行feedPosition()
我试着像下面的url那样做,但它面临同样的问题:
请帮忙
这是我的密码:
HTML:
//这里有一些内容
Javascript:
<script>
var feeds = [{
"type" : "publications",
"source" :"AAA",
"date" : new Date(2014, 4, 10),
"title" : "title 2014",
"thrumb" : "thrumb1.jpg"
},{
"type" : "tvc",
"source" : "BBB",
"date" : new Date(2015, 4, 10),
"title" : "title 2015",
"thrumb" : "thrumb2.jpg"
}];
var app = angular.module('anApp', []);
app.controller('anCtrl', function($scope) {
$scope.showYear = 2015;
$scope.feeds = feeds;
$scope.show = function(yr){
return Number(yr.getFullYear())==$scope.showYear;
};
})
.directive('feedListRepeatDirective', function() {
return function(scope, element, attrs) {
if (scope.$last){
feedPosition(true);
};
};
});
function feedPosition(){
for(a=0; a<$('#feedList > div').length; a++){
// do something to animate elements position
};
};
</script>
变量源=[{
“类型”:“出版物”,
“来源”:“AAA”,
“日期”:新日期(2014年4月10日),
“标题”:“标题2014”,
“thrumb”:“thrumb1.jpg”
},{
“类型”:“tvc”,
“来源”:“BBB”,
“日期”:新日期(2015年4月10日),
“标题”:“2015年标题”,
“thrumb”:“thrumb2.jpg”
}];
var app=angular.module('anApp',[]);
应用控制器('anCtrl',功能($scope){
$scope.showYear=2015年;
$scope.feeds=feeds;
$scope.show=功能(年){
返回编号(yr.getFullYear())==$scope.showYear;
};
})
.directive('feedListRepeatDirective',function(){
返回函数(范围、元素、属性){
如果(范围$last){
进给位置(真);
};
};
});
函数feedPosition(){
对于(a=0;a,此时,$last
应用于数组提要
,按日期
排序。ng if
控制是否渲染每个项目,但实际上并没有过滤列表
为了过滤列表,使$last
能够按需要运行,请删除ng if
并使用Angular。filter
根据show
函数从feeds
数组中选择一个子集项,并将其作为新数组返回。新数组仅包含以下元素:tshow
函数为返回true
<div ng-repeat="feed in feeds | filter: show | orderBy: '-date'" feed-list-repeat-directive>
//some content here
</div>
您好,有人建议我使用ng show而不是ng if。我认为这与您的解决方案类似。但是,我不希望所有年份的提要都呈现在dom中,而只是隐藏未删除的项目。顺便说一句,我已经放弃了ng if。相反,我为选择年份设置了一个模型,每次用户更改所选年份时,我都会进行新的$http调用。您好,ng-show
与我的解决方案不同。ng-show
将项目呈现给DOM,但通过应用.ng hide
类将其隐藏。我的答案中的解决方案使用过滤器
从数组中选择项目子集,并将其作为新数组返回。因此不会呈现排除的项目。答案更新以澄清这一点。但是您的解决方案听起来似乎也能工作,尽管会有额外的$http
调用开销。Ic,非常感谢,我发现$http方式更适合我的工作,因为我不需要同时使用所有年份的数据。但我认为这仍然是一个有用的展示。如果可用,我会尝试,非常感谢。:)
<div ng-repeat="feed in feeds | filter: show | orderBy: '-date'" feed-list-repeat-directive>
//some content here
</div>
$scope.show = function(feed){
return Number(feed.yr.getFullYear())==$scope.showYear;
};