繁体   English   中英

AngularJS $ watch不适用于过滤的ng-repeat

[英]AngularJS $watch not working for filtered ng-repeat

我试图在过滤后的数据列表上使用$ watch,但是它似乎不起作用。 这是我的代码片段。

HTML:

<div ng-repeat="dlr in dealers | filter : filterDealers ">
    {{dlr.name}}
</div>

控制者

$scope.$watch('dealers', function () {
    console.log('dealers was changed');
});

$scope.filterDealers = function (dlr) {
    if (dlr.name = 'test') {
        return true;
    } else {
        return false;
    }
}

加载页面时会打印console.log,但是如果我过滤列表,则不会打印出来。

如果您只需要知道何时过滤数据,只需在控制器中过滤经销商即可。

 <div ng-repeat="dlr in filteredDealers ng-init=filterDealers>"> 
     {{dlr.name}}
 </div>

在您的控制器中执行以下操作:

$scope.filterDealer = function() {
    $scope.filteredDealers = [];
    for (var i=0; i<dealers.length; i++) {
        var dlr = dealers[i];
        if (dlr.name = 'test') {
            $scope.filteredDealers.push(dlr);
        }
    }
    // you know your filtering is done
    console.log('dealers was changed');
}

我不认为您会在2方式绑定的$ scope变量上设置$watch 如果要让函数在ng-repeat完成运行后运行,则可以执行一个小指令并检查$last

像这样的东西:

.directive('isLastItem', function () {
 return {
    restrict: 'A',
    link: function (scope, element, attr) {
        if (scope.$last === true) {
            //run your logic here
        }
    }
 }

然后的HTML

<div ng-repeat="dlr in dealers | filter : filterDealers " is-last-item>

现在-我不知道您希望此逻辑在哪里发生,因此您可能希望将指令中的$emit传递给控制器​​。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM