今回の問題はデータ取得が非同期のため発生します。 プロミスを使うと、非同期を同期のように処理することができます。 データ取得処理で、成功:resolve、失敗:rejectを呼び出すと、then(成功コールバック,失敗コールバック)の各コールバックを実行します。 今回の場合、resolveで取得したデータを渡し、成功コールバックで受け取り、画面遷移に必要な処理を書けばうまく動作すると思います。 以前はデータ取得処理で$scope.$emitでデータを渡し、$scope.$onで受け取る方法を多用していましたが、あまりにも複雑な処理となるため、上記方法に落ち着きました。 // ng-clickで呼び出す関数 $scope.button1 = function() { getData().then(function(list) { // 取得成功 $scope.list = list; //