javascript - 在 Angular 呈现元素后滚动到列表项

标签 javascript html angularjs

我想滚动到聊天框中的最后一条消息。所以我这样做 -

akiRepair.controller("chatCtrl", ['$scope', function($scope){
...
    var size = $scope.messages.length;
    var t = document.querySelector("#chat-box");
      console.log(t);
      var elt = angular.element(t.querySelector("md-list-item")[size-1]);

      angular.element("#chat-box").animate({scrollTop: elt.offset().top}, "slow");

现在,在 ng-repeat 完成渲染之前, Controller 代码已运行,这是我不想要的。有什么方法可以暂停“滚动到”功能,直到一切都正确呈现。

HTML 代码 -

<md-list layout-padding id="chat-box">
      <md-list-item class="md-3-line" ng-repeat="message in messages">
          <i class="md-avatar material-icons"
          ng-if="message.sender">face</i>
          <div class="md-list-item-text"
          ng-class="message.sender?'left-align':'right-align'">
            <h3>{{message.what}}</h3>
            <h4 class="faded">{{message.whence | date: 'yyyy:mm:dd hh:mm:ss'}}</h4>
          </div>
          <i class="md-avatar material-icons"
          ng-if="!message.sender">face</i>
          <md-divider ng-if="!$last"></md-divider>
      </md-list-item>

谢谢

最佳答案

你可以只使用超时:

setTimeout(function() {
    // Your delayed code goes here
});

如果不将延迟指定为第二个参数,则传递的函数将在当前执行线程完成页面呈现后立即调用。

您还可以使用 Angular 提供的 $timeout 服务(setTimeout 的包装器),但它不会给您带来任何好处。它只会触发另一个不必要的摘要周期。

关于javascript - 在 Angular 呈现元素后滚动到列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34225795/

相关文章:

javascript - 无法加载带有数据的选项卡式页面

html - header Bootstrap 中的搜索对齐问题

javascript - 在 validate.js 脚本中验证公司电子邮件

html - 多个表头

java - 需要在java中将XML转换为HTML

html - jQuery 可排序链接未加载

javascript,在 Chrome Web 应用程序中创建窗口,如何包含成功调用新窗口函数的 promise ?

javascript - 使用 Javascript、HTML5 的跨域 REST 代理

javascript - 过滤相关属性

javascript - 在父级 Vuejs 中更改子级的 props