1

好的,所以我知道在使用 AngularJS 时在控制器中进行任何 DOM 操作被认为是不好的做法,您应该使用指令和 $scope 来处理这些东西,但是事件绑定呢?从它的外观来看,考虑到所有内置事件指令,如 ngClick、ngMousedown、ngMouseenter 等,这也是不受欢迎的......但如果是这样的话,那么我有一段代码我不知道如何做AngularJS的方式。

我正在构建的应用程序具有无限滚动,它是用这段代码实现的(当前位于控制器中):

$(document).bind('scroll', function(){
    if(!$scope.loadingIssues && $(window).scrollTop() + $(window).height() >= $('.user-feedback-list').offset().top + $('.user-feedback-list').height()) {
        $scope.loadIssues();
    }
});

这允许用户滚动页面,当页面到达存储无限滚动数据的元素的底部时,它会触发函数以加载更多数据。现在我没有进行任何 DOM 操作,所有函数都只是更新附加到 $scope 的数据,我让 AngularJS 进行 DOM 更新,但是这个事件是否与 AngularJS 的最佳实践绑定?如果是这样,我将如何以 AngularJS 的方式执行此操作(我认为指令在这种情况下不起作用,因为我认为不可能将指令附加到文档对象)?

4

1 回答 1

1

我认为目前没有一种 AngularJS 方法可以进行这种事件绑定。据我所知,为所有丢失的事件添加本地支持正在进行中,但尚未在任何稳定版本中发布。

所以现在我们必须像你在你的问题中所说的那样做。

不过,我认为您需要这样做才能使其正常工作:

$scope.$apply(
    function() {
        $scope.loadIssues();
    }
);

这是因为您正在处理来自 AngularJS 之外的事件。$apply 确保 AngluarJS 被通知任何模型更改以及可能由于您的 loadIssues() 调用而发生的事情。

于 2012-11-02T17:10:50.203 回答