mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
BREAKING CHANGE: $ionicScrollDelegate, $ionicSlideBoxDelegate, and
$ionicSideMenuDelegate have been removed.
- $ionicScrollDelegate has been changed to $ionicScrollController.
Documentation:
[ionContent](
http://ajoslin.github.io/docs/nightly/api/directive/ionContent),
[ionScroll](
http://ajoslin.github.io/docs/nightly/api/directive/ionScroll)
Change your code from this:
```html
<ion-content ng-controller="MyCtrl">
<button ng-click="scrollBottom()">Scroll to bottom!</button>
</ion-content>
```
```js
function MyCtrl($scope, $ionicScrollDelegate) {
$scope.scrollBottom = function() {
$ionicScrollDelegate.scrollBottom();
};
}
```
To this:
```html
<!-- optional attr controller-bind, see docs -->
<ion-content ng-controller="MyCtrl">
<button ng-click="scrollBottom()">Scroll to bottom!</button>
</ion-content>
```
```js
function MyCtrl($scope) {
$scope.scrollBottom = function() {
$scope.$ionicScrollController.scrollBottom();
};
}
```
- $ionicSideMenuDelegate has been changed to
$ionicSideMenusController. Documentation:
[ionSideMenus](http://ajoslin.github.io/docs/nightly/api/directive/ionSideMenus)
Change your code from this:
```html
<ion-side-menus>
<ion-side-menu side="left">Side Menu Left</ion-side-menu>
<ion-pane ion-side-menu-content ng-controller="MyCtrl">
<button ng-click="toggleLeftMenu()">
Toggle Left Menu!
</button>
</ion-pane>
</ion-side-menus>
```
```js
function MyCtrl($scope, $ionicSideMenuDelegate) {
$scope.toggleLeftMenu = function() {
$ionicSideMenuDelegate.toggleLeft();
};
}
```
To this:
```html
<!-- optional attr controller-bind, see documentation -->
<ion-side-menus>
<ion-side-menu side="left">Side Menu Left</ion-side-menu>
<ion-pane ion-side-menu-content ng-controller="MyCtrl">
<button ng-click="toggleLeftMenu()">
Toggle Left Menu!
</button>
</ion-pane>
</ion-side-menus>
```
```js
function MyCtrl($scope) {
$scope.toggleLeftMenu = function() {
$scope.$ionicSideMenuController.toggleLeft();
};
}
```
- $ionicSlideBoxDelegate has been removed and upgraded to
$ionicSlideBoxController. It had only one method that
was unneeded. [Documentation](
http://ajoslin.github.io/docs/nightly/api/directive/ionSlideBox)
164 lines
5.1 KiB
HTML
164 lines
5.1 KiB
HTML
<html ng-app="navTest">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Content</title>
|
|
|
|
<!-- Sets initial viewport load and disables zooming -->
|
|
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
|
|
<link rel="stylesheet" href="../../../../dist/css/ionic.css">
|
|
|
|
<script src="../../../../dist/js/ionic.bundle.js"></script>
|
|
</head>
|
|
<body ng-controller="ThisCtrl">
|
|
<ion-pane>
|
|
<ion-header-bar id="header" class="bar-positive">
|
|
<h1 class="title">Title</h1>
|
|
</ion-header-bar>
|
|
|
|
<ion-content id="container"
|
|
start-y="55"
|
|
on-scroll="onScroll(event, scrollTop, scrollLeft)"
|
|
on-scroll-complete="onScrollComplete(scrollTop, scrollLeft)"
|
|
on-refresh="onRefresh()"
|
|
on-refresh-opening="onRefreshOpening(amount)"
|
|
padding="true"
|
|
header-shrink="60"
|
|
class="has-tabs has-header">
|
|
<ion-refresher></ion-refresher>
|
|
<div id="search-box" class="bar bar-header item-input-inset">
|
|
<label class="item-input-wrapper">
|
|
<i class="icon ion-ios7-search placeholder-icon"></i>
|
|
<input type="search" placeholder="Search">
|
|
</label>
|
|
<button class="button button-clear">
|
|
Cancel
|
|
</button>
|
|
</div>
|
|
<div ng-controller="TestCtrl"></div>
|
|
<button ng-click="add()">Click</button>
|
|
<ul class="list" ng-controller="AppCtrl">
|
|
<li class="list-item" ng-repeat="item in items">asdf{{$index}}</li>
|
|
</ul>
|
|
<input type="text" placeholder="INPUT TEXT">
|
|
</ion-content>
|
|
<nav id="tab-bar" class="tabs tabs-icon-top">
|
|
<a class="tab-item" href="#">
|
|
<i class="icon ion-game-controller-a"></i>
|
|
Fun
|
|
</a>
|
|
<a class="tab-item">
|
|
<i class="icon ion-locked"></i>
|
|
Security
|
|
</a>
|
|
<a class="tab-item">
|
|
<i class="icon ion-heart"></i>
|
|
Simple
|
|
</a>
|
|
<a class="tab-item">
|
|
<i class="icon ion-leaf"></i>
|
|
Light
|
|
</a>
|
|
<a class="tab-item">
|
|
<i class="icon ion-waterdrop"></i>
|
|
Clean
|
|
</a>
|
|
</nav>
|
|
|
|
</ion-pane>
|
|
|
|
<script>
|
|
angular.module('navTest', ['ionic'])
|
|
|
|
.directive('headerShrink', function($document) {
|
|
var fadeAmt;
|
|
|
|
var shrink = function(header, amt, max) {
|
|
console.log('Translating up', amt);
|
|
amt = Math.min(max - 20, amt);
|
|
fadeAmt = 1 - amt / (max - 20);
|
|
ionic.requestAnimationFrame(function() {
|
|
header.style[ionic.CSS.TRANSFORM] = 'translate3d(0, -' + amt + 'px, 0)';
|
|
for(var i = 0, j = header.children.length; i < j; i++) {
|
|
header.children[i].style.opacity = fadeAmt;
|
|
}
|
|
});
|
|
};
|
|
|
|
return {
|
|
restrict: 'A',
|
|
link: function($scope, $element, $attr) {
|
|
var starty = $scope.$eval($attr.headerShrink) || 0;
|
|
var shrinkAmt;
|
|
|
|
var header = $document[0].body.querySelector('.bar-header');
|
|
var headerHeight = header.offsetHeight;
|
|
|
|
$element.bind('scroll', function(e) {
|
|
if(e.detail.scrollTop > starty) {
|
|
// Start shrinking
|
|
shrinkAmt = headerHeight - Math.max(0, (starty + headerHeight) - e.detail.scrollTop);
|
|
shrink(header, shrinkAmt, headerHeight);
|
|
} else {
|
|
shrink(header, 0, headerHeight);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
})
|
|
|
|
|
|
|
|
.directive('hidesHeader', function() {
|
|
return {
|
|
link: function($scope, $element, $attr) {
|
|
var startTop = $element[0].offsetTop;
|
|
}
|
|
}
|
|
})
|
|
|
|
.controller('TestCtrl', function($scope, $timeout) {
|
|
console.log('CONSTRUCT');
|
|
$timeout(function() {
|
|
});
|
|
})
|
|
|
|
.controller('ThisCtrl', function($scope, $timeout) {
|
|
var header = document.getElementById('header');
|
|
var content = document.getElementById('container');
|
|
var startTop = header.offsetTop;
|
|
$scope.onScrollComplete = function(event, scrollTop, scrollLeft) {
|
|
}
|
|
$scope.add = function() {
|
|
console.log('Adding!');
|
|
};
|
|
var last = 0;
|
|
$scope.onRefresh = function() {
|
|
$timeout(function() {
|
|
$scope.$broadcast('scroll.refreshComplete');
|
|
}, 1000);
|
|
};
|
|
$scope.onScroll = function(event, scrollTop, scrollLeft) {
|
|
console.log('Scroll', scrollTop, scrollLeft);
|
|
/*
|
|
if(scrollTop > startTop) {
|
|
var diff = scrollTop - startTop;
|
|
console.log(diff);
|
|
header.style[ionic.CSS.TRANSFORM] = 'translate3d(0px, -' + diff + 'px, 0)';
|
|
content.style.marginTop = -diff + 'px';
|
|
}
|
|
*/
|
|
};
|
|
})
|
|
|
|
.controller('AppCtrl', function($scope, $compile, $timeout, $element) {
|
|
$scope.items = [];
|
|
for(var i = 0; i < 70; i++) {
|
|
$scope.items.push({
|
|
});
|
|
}
|
|
})
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|