Onsen UI 1.x は、AngularJS 1.x に依存していました。Onsen UI は、2.x 以降から、Web Component を基礎として構築され、他のフレームワークへの依存もなくなりました。ただし、AngularJS 1 では役立つ機能も多々提供されているため、Onsen UI と AngularJS 1 を連携させ、一部機能は継続してサポートしています。
ここでは、Onsen UI 1.x から 2.x ( AngularJS 1 と連携 ) へのコードの移行方法を、簡単に解説します。なお、Onsen UI と他のフレームワーク ( Angular 2+、React など ) の組み合わせに興味がある方は、各フレームワーク向けのドキュメントをご確認ください。Onsen UI のコア/中核となる中身 ( コンポーネント、スタイルなど ) は、どのフレームワークの組み合わせにおいても変わらないため、Onsen UI のコンポーネント、スタイルなどに関しては、同じ知識が使用できます。
配布用 Onsen UI 2 パッケージの中には、onsenui.js と angular-onsenui.js が置かれており、後者のファイルでは、ファイル名が示すとおり、前述の 連携処理を行っています。なお、AngularJS 1 本体の読み込みは、現在、行っていません ( 代わりに、「 連携処理 」 を行っています )。最初に行うことは、index.html 内で読み込んでいるファイルを、次のように更新します。
<script src="path/to/onsenui.js"></script>
<script src="path/to/angular.js"></script>
<script src="path/to/angular-onsenui.js"></script>
移行する上で、上記の変更が、最も大事で、最も初めに行う処理です。ただし、上記の更新後に、アプリを実行しても、コンソール上ではエラー ( メソッドの欠如/オブジェクトの欠如を示すエラー ) が出力されます。これは、Onsen UI 2 では、開発者に使いやすいように API が改良されているためです。エラーを解決するためには、別途、コード内で使用されているメソッドの名前を更新したり、または、新規に追加されたプロパティーを使用できるようにメソッドの定義を修正する必要があります。
次の項目では、開発者側で行う変更点をまとめています。変更後もなんらかの問題が生じる場合には、Onsen UI 2 の ガイド 上で API の詳細などを確認してください。それでも解決できない場合には、コミュニティーのフォーラム を併せてご確認ください。
onsenui.js ( index.html 上 ) を読み込んだ直後に、ons.disableAutoStyling(); を呼び出します。component.setXXX(...) と component.isXXX() 系のメソッドのほとんどが廃止されました。なお、現在は、メソッド名の 「 XXX 」 部分をプロパティー名として使用します ( すべて小文字にします )。たとえば、myCarousel.setDisabled(true); => myCarousel.disabled = true; と変更します。getDeviceBackButtonHandler() メソッドも廃止されました。代わりに、onDeviceBackButton プロパティーを使用します。たとえば、myNavigator.onDeviceBackButton = function() {}; のように変更します。getCurrentPage メソッドは廃止されました。代わりに、topPage プロパティー ( HTMLElement ) を使用します。たとえば、myNavigator.getCurrentPage(); => myNavigator.topPage; のように変更します。getPages() メソッドは廃止されました。代わりに、pages プロパティー (HTMLCollection) を使用します。たとえば、myNavigator.getPages(); => myNavigator.pages; のように変更します。options.onTransitionEnd の名前は、options.callback へと変更されました。persistent 属性と no-reload 属性は廃止されました。これらの属性を使用していたときの挙動は、現在、デフォルトの挙動になっています。modifiers 属性 ( longdivider、nodivider などが設定可 ) が追加されました。ons-list-item では、ons-col、ons-row、または、カスタム CSS を使用しなくとも、left、center、right 要素を指定すれば、一覧を構築できるようになりました。setActiveCarouselItemIndex() メソッドの名前は、setActiveIndex() へと変更されました。getActiveCarouselItemIndex() メソッドの名前は、getActiveIndex() へと変更されました。このディレクティブは廃止されました。現在は、次のような CSS と div 要素を使用して、同等の挙動を実現しています。
.scroller {
display: block;
height: 100%;
overflow: scroll;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: none;
-ms-scroll-snap-type: mandatory;
}
プロジェクトから AngularJS 1 を取り除く場合には、次の処理が必要となります。
var 属性は、AngularJS 1 用です。代わりに、id を使用します。そして、要素の取得には、getElementById または querySelector を使用します。たとえば、var myNavigator = document.getElementById('my-navigator'); myNavigator.pushPage(...); のように変更します。ons-prepush などのイベントリスナー系の属性は、AngularJS 1 用です。代わりに、JavaScript で使用する、通常のイベントリスナーに変更します。たとえば、`document.addEventListener(‘prepush’, function(event) {}); のように変更します。ons-sliding-menu ディレクティブと ons-split-view ディレクティブは、AngularJS 1 用です。代わりに、ons-splitter コンポーネント を使用します。