AngularJsでController実行前に処理する方法
AngularJsでrouteProvideで処理を分けているけど、ログインチェックとかを共通でController実行前にしたいなぁと思いつついまいち情報がなかったのでメモ
resolveと$q 使って処理すればいけそうな感じで
http://stackoverflow.com/questions/18010796/return-interdependent-async-promises-in-routeprovider-resolve
http://stackoverflow.com/questions/17731942/how-to-load-data-synchronously-in-angularjs-application
これつかっていけたぜヒャッホウと思ったら、リロードでうまく動かないことがあったので(勘違いもあったかも)
http://stackoverflow.com/questions/16286605/initialize-angularjs-service-with-asynchronous-data#16754186
こちらの方法でうまくいった。
app.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/', { templateUrl: 'partial/index.html', controller: 'IndexCtrl', resolve: { user: function($q, loginCheck){ var d = $q.defer(); loginCheck(d); return d.promise; } } }). otherwise({ redirectTo: '/' }); }]); app.factory('loginCheck', ['$q','$http', '$rootScope', function($q, $http, $rootScope) { return function(d) { $http({ method: 'POST', url: '/user', }). success(function(data, status, headers, config) { $rootScope.hoge = data; d.resolve(data); }). error(function(data, status, headers, config) { d.reject(status); } }); return d.promiss; // ここは怪しい } }]); app.controller('IndexCtrl', ['$scope', '$rootScope', 'user', function($scope, $rootScope, user) { console.log(user); console.log($rootScope.hoge); } ]);
ちょっと書き換えたりしているのでもしかしたら動かないかも
そもそもfactoryとかserviceとかいろいろあってよくわかってないのです。