Javascript 如果在angular.js中,检测$last的指令不适用于ng

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:

我正在使用angular.js和jquery制作新闻提要页面

我正在使用指令检测要显示的最后一个提要。当它返回
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
数组中选择一个子集项,并将其作为新数组返回。新数组仅包含以下元素:t
show
函数为返回
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;
};