2

我一直在尝试找出如何在模型发生更改时执行一些特定于视图的 javascript 代码。在下面的示例中,每当您单击“Say”按钮时,都会向模型添加一个新条目,从而更新条目列表。样式表将条目列表的高度限制为大约五个条目。

调用类似的正确方法是什么scrollLastChatEntryElementIntoView();?我知道如何将元素滚动到视图中,但我似乎找不到任何有关如何以及何时响应视图更新的信息?我应该在哪里声明脚本,什么时候应该调用它?

<div class="chat">
   <ol class="entries">
      <li class="entry" ng-repeat="entry in chat.entries">
         <label>{{entry.sender}}</label> {{entry.text}}
      </li>
   </ol>
   <form class="newEntry" ng-submit="chat.newEntry.submit()">
      <input class="text" ng-model="chat.newEntry.text" placeholder="Type to chat"/>
      <span class="button submit" ng-click="chat.newEntry.submit()">Say</span>
   </form>
</div>
4

1 回答 1

3

我最近遇到了类似的情况,我这样做的方式是创建一个“自动滚动”指令,该指令正在侦听列表元素上的“DOMSubtreeModified”事件,并在添加新元素时自动向下滚动。

app.directive('autoScrolling', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {

            var el = angular.element(element);

            scope.scrollDown = function(evt) {
                // scroll down:
                el.scrollTop(el.prop('scrollHeight'));
            };

            scope.scrollDown();
            // each time the DOM element of the list changes, 
            // make sure we are scrolled all the way down...
            element.bind('DOMSubtreeModified', scope.scrollDown);
        }
    };  
});

然后在你的列表元素上

<ol auto-scrolling>...

plnkr 演示在这里

于 2013-03-19T14:17:03.133 回答