【问题标题】:Event Bindings The AngularJS Way?事件绑定 AngularJS 方式?
【发布时间】:2012-10-23 04:04:39
【问题描述】:

好的,所以我知道在使用 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 的方式做到这一点(我认为指令在这种情况下不起作用,因为我认为不可能将指令附加到文档对象)?

【问题讨论】:

  • 我想我会尝试使用服务和运行来处理它
  • 当你说“跑去处理它”时,你的意思是“学会处理它”吗?否则我不知道那是什么意思。
  • 不,我的意思是docs.angularjs.org/api/angular.Module,run(initializationFn) ,使用此方法注册在当前模块的注入器完成加载时需要执行的工作。我认为这可能会有所帮助。

标签: standards angularjs


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 2016-02-27
    • 2012-05-12
    • 1970-01-01
    • 2014-03-28
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多