我试图向下滚动到delegate-handle =" start"离子载荷。当我尝试运行它时,我在控制台中收到此消息。
Delegate for handle "small" could not find a corresponding element with delegate-handle="small"! scrollTop() was not called!
可能的原因:如果您立即调用scrollTop(),并且您的元素使用delegate-handle =" small"是您的控制器的子项,那么您的元素可能尚未编译。在你的scrollTop()调用周围加上$ timeout,然后再试一次。
我的代码看起来像这样,有人可能会看到什么问题吗?
$timeout(function() {
$ionicScrollDelegate.$getByHandle('start').scrollTop();
}, 10);
如果我使用$ ionicScrollDelegate.scrollBottom(),它将滚动到底部,因此它必须是特定功能的问题。
html代码
<ion-view title="Kalender">
<ion-content>
<ion-list ng-repeat="activity in calendar">
<div class="item item-divider" ng-show="activity.date_divider != null" data-year="{{activity.year}}">
<div class="header-divider-small">{{activity.year}}</div>
<div class="header-divider">{{activity.date_divider}}</div>
</div>
<div class="item item-icon-right calendar" ng-show="activity.date_divider == null">
<span class="header">{{activity.name}}</span>
<br />
<span class="text">{{activity.time}} - {{activity.place}}</span>
<a class="button button-icon icon {{activity.icon}} right not-selected"></a>
</div>
</ion-list>
<div delegate-handle="start"></div>
</ion-content>
</ion-view>
感谢。
答案 0 :(得分:11)
Ionic 1.0.0-beta14
与getByHandle()
有一些奇怪的问题,所以你可以这样做:
$timeout(function() {
var startHandle = _.find($ionicScrollDelegate._instances, function (s) {
return s.$$delegateHandle === "start";
});
startHandle.scrollTop();
});
答案 1 :(得分:2)
我认为对于委托句柄在这里做什么存在误解。委托句柄是一种命名滚动/内容容器的方法。您可以将其视为一种为<ion-content>
容器提供唯一名称的方法,该名称可以在以后与该服务一起使用。在单个视图上可以有多个<ion-content>
容器,这就是命名是必要的原因。如果您只有一个滚动区域或者没有指定句柄,那么它只使用它找到的第一个视图。
您想要滚动到应用程序中的特定位置,这是$ionicScrollDelegate.anchorScroll('element-id');
的工作。通过一些修改,在这里查看您的代码。我已将委托句柄放在正确的位置,然后使用anchorScroll方法自动滚动到页面中的该ID。
<强>标记强>
<ion-view title="Kalender">
<ion-content delegate-handle="kalendar">
<ion-list ng-repeat="activity in calendar">
<div class="item item-divider" ng-show="activity.date_divider != null" data-year="{{activity.year}}">
<div class="header-divider-small">{{activity.year}}</div>
<div class="header-divider">{{activity.date_divider}}</div>
</div>
<div class="item item-icon-right calendar" ng-show="activity.date_divider == null">
<span class="header">{{activity.name}}</span>
<br />
<span class="text">{{activity.time}} - {{activity.place}}</span>
<a class="button button-icon icon {{activity.icon}} right not-selected"></a>
</div>
</ion-list>
<div id="start"></div>
</ion-content>
</ion-view>
<强>控制器强>
$timeout(function() {
$ionicScrollDelegate.$getByHandle('kalendar').anchorScroll('start');
}, 10);
答案 2 :(得分:0)
Specify the dalegate-handler in ion-content
<ion-view title="Kalender">
<ion-content delegate-handle="start">
<ion-list ng-repeat="activity in calendar">
<div class="item item-divider" ng-show="activity.date_divider != null" data-year="{{activity.year}}">
<div class="header-divider-small">{{activity.year}}</div>
<div class="header-divider">{{activity.date_divider}}</div>
</div>
<div class="item item-icon-right calendar" ng-show="activity.date_divider == null">
<span class="header">{{activity.name}}</span>
<br />
<span class="text">{{activity.time}} - {{activity.place}}</span>
<a class="button button-icon icon {{activity.icon}} right not-selected"></a>
</div>
</ion-list>
</ion-content>
</ion-view>
滚动顶部可以通过忘记滚动位置来实现,这可以通过使用
来实现$scope.$on("$destroy", function() {
var delegate = $ionicScrollDelegate.$getByHandle('start');
delegate. forgetScrollPosition();
});
使用
$ionicScrollDelegate.$getByHandle('start').scrollTop(); //To scroll to Top.
我注意到delegate-handle
与overflow-scroll
一起使用时无效。
答案 3 :(得分:0)
我设法这样做了:
$scope.scrollHandle = some-handle-value-that-you-want-to-use;
$scope.$on('$ionicView.loaded', function () {
$timeout(function () {
scrollView = $ionicScrollDelegate._instances.filter(function (s) {
if (!s.$$delegateHandle) return false;
return $parse(s.$$delegateHandle.slice(2, -2))
(angular.element(s.element).scope()) == $scope.scrollHandle;
})[0];
}).then(function () {
scrollView.scrollTo(0, 0, false);
});
});
在模板中:
delegate-handle="{{scrollHandle}}"
编辑:
此功能不再有效,请查看此解决方案以获取新解决方案:https://stackoverflow.com/a/32123613/1630623