我需要编写一个回调方法,每次调用ng-repeat时都会触发该方法。
从互联网上获得了几个选项
1. ng-init on ng-repeat
此处使用ng-init属性
调用该方法<ol ng-repeat="record in records | orderBy: sortCol:true" ng-init="$last && callMethod()">
2.使用自定义指令
HTML:
<ol ng-repeat="record in records| orderBy: 'name'" on-last-repeat>
AngularJs
angular.module('myapp', [])
.directive('onLastRepeat', function() {
return function(scope, element, attrs) {
if (scope.$last) setTimeout(function(){
scope.$emit('onRepeatLast', element, attrs);
}, 1);
};
})
.controller('Ctrl', function($scope, $http) {
$scope.records = [];
$scope.$on('onRepeatLast', function(scope, element, attrs){
//work your magic
});
$http.get('/path/to/record.json')
.success(function(data) {
$scope.records = data;
})
});
但是我的问题是它们都只是在初始触发一次(正如名字ng-init明显暗示的那样)。我希望只要sortColumn或sortOrder(asc或desc)或数据(记录)发生变化就会调用该方法。但上述两种方法都无法解决我的问题。
帮助很受欢迎??
答案 0 :(得分:1)
记录变更。你试过用$ watch方法吗?
$scope.$watch('records.length', function(newArray, oldArray){
//Do something
},true);
答案 1 :(得分:1)
由于手表仅监视参考更改,我认为您的解决方案将是 $ watchCollection()
答案 2 :(得分:1)
我已使用以下代码解决了该问题:
<强> HTML:强>
<ol ng-repeat="record in ($parent.newItems = (records | orderBy: sortCol:true))">
<强> AngularJs:强>
$scope.$watchCollection('newItems ', function(newCollection, oldCollection) {
newCollection && newCollection.length>0 && $scope.doSomething();
});