Movatterモバイル変換


[0]ホーム

URL:


Yosuke Onoue, profile picture
Uploaded byYosuke Onoue
PDF, PPTX10,928 views

AngularJSでの非同期処理の話

Embed presentation

Download as PDF, PPTX
2014年6月8日AngularJSでの非同期処理の話AngularJS 勉強会 by GDG神戸
自己紹介✤ おのうえ (@_likr)!✤ 博士課程の大学院生!✤ 可視化や最適化を使った意思決定支援に興味あり
Webと可視化✤ Canvas、SVG、WebGLといったAPI、
D3.js、Three.jsといったライブラリによって
Web上での可視化基盤が整えられたhttp://threejs.org/http://d3js.org/
AngularJSでやってること
本セッションの内容✤ JavaScriptには、HTTPアクセス、ファイルIO、
アニメーションなど非同期処理がたくさん!✤ 可視化のためのデータ取得も非同期処理!!✤ 実アプリケーションには必要不可欠な非同期処理を
AngularJSでどのように扱うのか様々な例を紹介
目次1. 遅延処理 - $timeout!2. HTTPアクセス - $http!3. REST APIサーバーへのアクセス - ngResource!4. Promiseを提供する - $q!5. ngRouteとresolve
目次1. 遅延処理 - $timeout!2. HTTPアクセス - $http!3. REST APIサーバーへのアクセス - ngResource!4. Promiseを提供する - $q!5. ngRouteとresolve
$timeout✤ window.setTimeoutのラッパー!✤ 指定した時間待った後処理を実行する!✤ 使い方https://docs.angularjs.org/api/ng/service/$timeout$timeout(fn[, delay])fndelay 遅れさせる時間(ミリ秒)実行する処理
$timeoutのサンプル<div ng-app><div ng-controller="TimeoutExample"><span>{{str}}</span><button ng-click="cancel()">Cancel</button></div></div>function TimeoutExample($scope, $timeout) {$scope.str = 'Prompt Result';var promise = $timeout(function() {$scope.str = prompt('Input Message');}, 2000);$scope.cancel = function() {$timeout.cancel(promise);$scope.str = 'Canceled';};}http://jsfiddle.net/likr/2NMyP/$timeoutで、2秒後にプロンプトを
表示して、入力をビューに表示する$timeout.cancelに$timeoutの
戻り値を渡すことで処理の中止$timeoutを依存性注入する
setTimeoutじゃダメなの?function TimeoutExample($scope) {$scope.str = 'Prompt Result';!var timeoutId = setTimeout(function () {$scope.str = prompt('Input Message');}, 2000);!$scope.cancel = function () {clearTimeout(timeoutId);$scope.str = 'Canceled';};}http://jsfiddle.net/likr/243ja/
setTimeoutじゃダメなの?function TimeoutExample($scope) {$scope.str = 'Prompt Result';!var timeoutId = setTimeout(function () {$scope.str = prompt('Input Message');}, 2000);!$scope.cancel = function () {clearTimeout(timeoutId);$scope.str = 'Canceled';};}http://jsfiddle.net/likr/243ja/function TimeoutExample($scope) {$scope.str = 'Prompt Result';!var timeoutId = setTimeout(function () {$scope.$apply(function () {$scope.str = prompt('Input Message');});}, 2000);!$scope.cancel = function () {clearTimeout(timeoutId);$scope.str = 'Canceled';};}データバインドを反映させるために$scope.$applyが必要http://jsfiddle.net/likr/243ja/2/
$timeoutとpromise✤ Promise: 非同期処理をうまく扱うためのインタフェース!!!!!✤ $timeoutはpromiseを返すpromise.catch(onRejected)onFullfilledonRejected 処理が失敗したときの処理処理が成功した時の処理promise.then(onFullfilled[, onRejected])
$timeoutとpromiseのサンプルfunction TimeoutExample($scope, $timeout) {$scope.str = 'Prompt Result';$scope.status = 'Pending';!var promise = $timeout(function () {$scope.str = prompt('Input Message');}, 2000);!promise.then(function () {$scope.status = 'Fullfilled';});promise.catch(function () {$scope.status = 'Rejected';});!$scope.cancel = function () {$timeout.cancel(promise);$scope.str = 'Canceled';};}http://jsfiddle.net/likr/2NMyP/1/$timeoutのpromiseに成功時、
失敗時のコールバックを登録
目次1. 遅延処理 - $timeout!2. HTTPアクセス - $http!3. REST APIサーバーへのアクセス - ngResource!4. Promiseを提供する - $q!5. ngRouteとresolve
$http✤ HTTPサーバーへとの通信を行う!✤ GET / POST / PUT / DELETE / HEAD!✤ JSONP!✤ 使い方https://docs.angularjs.org/api/ng/service/$http$http.get(url[, config])$http.post(url[, config])…$http(config)
$httpのサンプルfunction HttpExample($scope, $http) {$http.get('http://example.com/').then(function(response) {$scope.data = response.data;});}http://jsfiddle.net/likr/ct6Jn/function HttpExample($scope, $http) {$http({method: 'get',url: 'http://example.com/'}).then(function(response) {$scope.data = response.data;});}methodとurlを指定して$httpを呼び出す$httpを依存性注入する$httpはPromiseを返すのでthenで!通信成功、失敗時の処理ができる$http.getは$httpのショートカット
Response✤ Promiseでresolveされるオブジェクトのプロパティ!✤ data: Responseのbody!✤ status: HTTPのステータスコード!✤ headers: HTTPヘッダーのgetter!✤ config: $httpの引数!✤ statusText: HTTPのステータス文章
HttpPromise✤ HttpPromise!✤ $httpが返すPromise!✤ thenの代わりにsuccessとerrorが使えるfunction HttpExample($scope, $http) {$http.get('http://gdgkobe-ng-guestbook.appspot.com/greetings').success(function(response) {$scope.data = response.data;}).error(function(reason) {});}
他のAJAX APIと比べて✤ $scope.$applyの問題がない!✤ $httpBackendによるテストが容易
目次1. 遅延処理 - $timeout!2. HTTPアクセス - $http!3. REST APIサーバーへのアクセス - ngResource!4. Promiseを提供する - $q!5. ngRouteとresolve
ngResource✤ REST APIサーバーとの通信を便利にするモジュール!✤ REST APIサーバーの例https://docs.angularjs.org/api/ngResourceMethod URL 処理GET http://example.com/greetings greetingGET http://example.com/greetings/1 ID1POST http://example.com/greetings 新しいPUT http://example.com/greetings/1 ID1DELETE http://example.com/greetings/1 ID1
ngResourceの利用✤ AngularJS本体とは別jsファイルで提供されているので
scriptタグを追加して読み込む!!✤ 依存モジュールとして指定<script src="angular-resource.js"></script>var app = angular.module('example', ['ngResource']);
Resourceの作成✤ リソースのURLを指定してResourceを作成!!✤ factoryでserviceとして登録しておくと便利$resource(‘http://example.com/greetings/:id')app.factory('Greeting', function($resource) {return $resource(‘http://example.com/greetings/:id');});
Resourceの利用✤ データ取得!!!✤ データ保存var Greeting = $resource('http://example.com/greetings/:id');!var greetings = Greeting.query();var newGreeting = new Greeting();newGreeting.content = 'hello';newGreeting.$save();
Resourceの遅延処理var app = angular.module('example', ['ngResource']);!app.factory('Greeting', function($resource) {return $resource('http://gdgkobe-ng-guestbook.appsp});!app.controller('Main', function(Greeting) {var greetings = Greeting.query();greetings.$promise.then(function() {console.log(greetings);});console.log(greetings);});Resourceのメソッドはプレースホルダーを
返して、処理が完了した時点で内容を挿入するhttp://jsfiddle.net/likr/BHS5v/
ResourceとPromise✤ 関数の結果の$promiseプロパティでPromiseを取得
get()、query()、delete()、$save…Greeting.query().$promise.then(function(greetings) {// TODO});
目次1. 遅延処理 - $timeout!2. HTTPアクセス - $http!3. REST APIサーバーへのアクセス - ngResource!4. Promiseを提供する - $q!5. ngRouteとresolve
Promiseを提供する✤ $timeout、$http、ngResourceはプロミスで
非同期処理を扱うことができる!✤ 自分の非同期処理、非AngularJSの外部ライブラリを
同様のAPIで提供する方法は?
$q✤ Promiseの作成、ラップをする!✤ $timeout、$http、ngResource内でも使用されているhttps://docs.angularjs.org/api/ng/service/$q$q.defer()$q.when(promise)$q.all(promises)
$q.defer✤ Deferredオブジェクトを作成する!!✤ resolve、reject、notifyで非同期処理の状態を通知する!!!✤ promiseプロパティでPromiseオブジェクトを取得するdeferred.resolve(value)deferred.reject(reason)deferred.notify(value)var deferred = $q.defer()var promise = deferred.promise;
$qのサンプル1var app = angular.module('q-example', []);!app.factory('d3get', function($q) {return function(xhr) {var deferred = $q.defer();xhr.on('load', function(data) {deferred.resolve(data);}).on('error', function(status) {deferred.reject(status);}).get();return deferred.promise;};})!app.controller('Main', function(d3get) {d3get(d3.csv('http://example.com/data.csv')).then(function(data) {// TODO});});D3.jsのxhr系関数をラップしてみる$q.deferでdeferredオブジェクトを作成データ取得が成功したらresolvepromiseオブジェクトを返すthenでデータ取得後の処理を行うloadDataをラップした関数をfactoryで提供データ取得が失敗したらreject
$qのサンプル2function getData(url) {return $.get(url);}!!function Main($q) {$q.when(getData('http://example.com/')).then(function(data) {// TODO});});jQueryのAJAX関数をラップしてみるAngularJSとは関係のない、jQueryXHR(Promise)を返す関数$q.whenでラップすると!$scope.$applyの手間等が不要
目次1. 遅延処理 - $timeout!2. HTTPアクセス - $http!3. REST APIサーバーへのアクセス - ngResource!4. Promiseを提供する - $q!5. ngRouteとresolve
問題✤ 非同期処理が成功してからコントローラーの処理をしたい場合!✤ 認証、データ取得
ngRoute✤ AngularJSのルーティングモジュール!✤ コントローラーへの依存性注入で、コントローラー処理に入る前にデータ取得などを済ませることができる!✤ ui-routerでも同様https://docs.angularjs.org/api/ngRoute
ngRouteのresolvevar app = angular.module('resolve-example', ['ngRoute']);!app.config(function($routeProvider) {$routeProvider.when('/', {template: '{{data}}',controller: function($scope, response) {$scope.data = response.data;},resolve: {response: function($http) {return $http.get('http://example.com/');}}});});resolveの要素がPromiseを返した場合、全てのPromiseがresolveされてからコントローラーの処理を行う
まとめ✤ AngularJSが提供する非同期処理APIを使うことで
複雑な非同期処理も簡単に扱える!✤ Promiseパターンで非同期処理を統一的に扱える!✤ $qで自分で非同期処理を提供できる!✤ AngularJS用じゃない非同期処理は、データバインドに気をつける($q.when, $scope.$apply)

Recommended

PDF
AngularJSの高速化
PPTX
Angular js はまりどころ
PDF
Angular.jsについてちょっとしゃべる
PPTX
React を導入した フロントエンド開発
PDF
One Time Binding & Digest Loop
PPTX
エンタープライズ分野での実践AngularJS
PPTX
AngularJS入門
PDF
Vue.jsでさくっとMVVM
PDF
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
PDF
RailsでReact.jsを動かしてみた話
PPTX
今からでも遅くない! React事始め
PDF
React.jsでクライアントサイドなWebアプリ入門
PPTX
20160927 reactmeetup
PDF
いまさら聞けない!?Backbone.js 超入門
PDF
はじめてのVue.js
PPTX
まだDOM操作で消耗してるの?
 
PDF
なぜ人は必死でjQueryを捨てようとしているのか
PDF
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
PDF
Vue.js入門
PDF
SIROK技術勉強会 #1 「Reactってなんだ?」
PDF
Start React with Browserify
PPTX
AngularJSを浅めに紹介します
PDF
Alt01-LT
PPTX
簡単AngularJS(関西AngularJS勉強会)
PDF
jQueryを中心としたJavaScript
PDF
Flux react現状確認会
PDF
React.js + Flux
PDF
3分でわかるangular js
PDF
Async Enhancement
PPTX
JavaScript 非同期処理 入門

More Related Content

PDF
AngularJSの高速化
PPTX
Angular js はまりどころ
PDF
Angular.jsについてちょっとしゃべる
PPTX
React を導入した フロントエンド開発
PDF
One Time Binding & Digest Loop
PPTX
エンタープライズ分野での実践AngularJS
PPTX
AngularJS入門
PDF
Vue.jsでさくっとMVVM
AngularJSの高速化
Angular js はまりどころ
Angular.jsについてちょっとしゃべる
React を導入した フロントエンド開発
One Time Binding & Digest Loop
エンタープライズ分野での実践AngularJS
AngularJS入門
Vue.jsでさくっとMVVM

What's hot

PDF
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
PDF
RailsでReact.jsを動かしてみた話
PPTX
今からでも遅くない! React事始め
PDF
React.jsでクライアントサイドなWebアプリ入門
PPTX
20160927 reactmeetup
PDF
いまさら聞けない!?Backbone.js 超入門
PDF
はじめてのVue.js
PPTX
まだDOM操作で消耗してるの?
 
PDF
なぜ人は必死でjQueryを捨てようとしているのか
PDF
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
PDF
Vue.js入門
PDF
SIROK技術勉強会 #1 「Reactってなんだ?」
PDF
Start React with Browserify
PPTX
AngularJSを浅めに紹介します
PDF
Alt01-LT
PPTX
簡単AngularJS(関西AngularJS勉強会)
PDF
jQueryを中心としたJavaScript
PDF
Flux react現状確認会
PDF
React.js + Flux
PDF
3分でわかるangular js
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
RailsでReact.jsを動かしてみた話
今からでも遅くない! React事始め
React.jsでクライアントサイドなWebアプリ入門
20160927 reactmeetup
いまさら聞けない!?Backbone.js 超入門
はじめてのVue.js
まだDOM操作で消耗してるの?
 
なぜ人は必死でjQueryを捨てようとしているのか
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
Vue.js入門
SIROK技術勉強会 #1 「Reactってなんだ?」
Start React with Browserify
AngularJSを浅めに紹介します
Alt01-LT
簡単AngularJS(関西AngularJS勉強会)
jQueryを中心としたJavaScript
Flux react現状確認会
React.js + Flux
3分でわかるangular js

Similar to AngularJSでの非同期処理の話

PDF
Async Enhancement
PPTX
JavaScript 非同期処理 入門
PDF
Promiseでコールバック地獄から解放された話
PPTX
モダン JavaScript における非同期処理 - Promise, async/await -
PDF
PHPにおけるI/O多重化とyield
PDF
Flow.js
 
PDF
About promise
 
PPTX
Reactive
PPTX
それRxJSでできるよ
ODP
AngularJSとの危険な関係 by Mario Heiderich - CODE BLUE 2015
PDF
Promise async await
PDF
JS非同期処理のいま
PPTX
SpringIO2019報告_Kotlin関連
PPT
Ja story of cakephp2.0
Async Enhancement
JavaScript 非同期処理 入門
Promiseでコールバック地獄から解放された話
モダン JavaScript における非同期処理 - Promise, async/await -
PHPにおけるI/O多重化とyield
Flow.js
 
About promise
 
Reactive
それRxJSでできるよ
AngularJSとの危険な関係 by Mario Heiderich - CODE BLUE 2015
Promise async await
JS非同期処理のいま
SpringIO2019報告_Kotlin関連
Ja story of cakephp2.0

More from Yosuke Onoue

PDF
Angular 2のRenderer
PDF
アニメーション(のためのパフォーマンス)の基礎知識
PDF
AngularJSでデータビジュアライゼーションがしたい
PDF
GDG DevFest Kobe Firebaseハンズオン勉強会
PDF
Polymerやってみた
PDF
asm.jsとWebAssemblyって実際なんなの?
PDF
AngularFireで楽々バックエンド
PDF
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
PDF
社会的決定とAHP
PDF
CUDA 6の話@関西GPGPU勉強会#5
PDF
Anaconda & NumbaPro 使ってみた
PDF
PythonistaがOCamlを実用する方法
KEY
What's New In Python 3.3をざっと眺める
KEY
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
KEY
PyOpenCLによるGPGPU入門
PPTX
数理最適化とPython
PPTX
201010ksmap
PPTX
PyCUDAの紹介
PPT
Rsa暗号で彼女が出来るらしい
Angular 2のRenderer
アニメーション(のためのパフォーマンス)の基礎知識
AngularJSでデータビジュアライゼーションがしたい
GDG DevFest Kobe Firebaseハンズオン勉強会
Polymerやってみた
asm.jsとWebAssemblyって実際なんなの?
AngularFireで楽々バックエンド
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
社会的決定とAHP
CUDA 6の話@関西GPGPU勉強会#5
Anaconda & NumbaPro 使ってみた
PythonistaがOCamlを実用する方法
What's New In Python 3.3をざっと眺める
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門
数理最適化とPython
201010ksmap
PyCUDAの紹介
Rsa暗号で彼女が出来るらしい

AngularJSでの非同期処理の話


[8]ページ先頭

©2009-2025 Movatter.jp