

Onsenを使用してアプリを作っています。  
以下の順番でリストを作ろうとしています。

１．外部にデータを作成  
２．アプリ起動時にindexedDBでテーブルを作成し、外部データを格納  
３．ページ読み込み時、indexedDBからデータを変数に格納し、$scopeへ引き渡す  
４．ng-repeatにてリストを作成

３の別関数を呼び出しているため、$applyを使っているのですが、リストが反映されません。

この関数はちゃんと動きます。  
（３秒後にリストが表示されます）

[code]

    setTimeout(function () {
        $scope.$apply(function() {
            $scope.items = [~~];
        });
    }, 3000);
    
[/code]

getDataを使い、外部からデータを持ってくる過程を挟むと、動かなくなります。  
ただし、ログは正常に変数の情報が出てきます。

[code]

    setTimeout(function () {
        $scope.$apply(function() {
            getData()
                .then(function(value) {
                    $scope.items = value;
                    console.log(value);
                });
        });
    }, 3000);
    
[/code]

途中で関数を呼び出していることが原因なんでしょうが、どうして駄目なんでしょうか？  
又、ほかの何かいい方法はないのでしょうか？

よろしくお願いします。


CC BY-SA 3.0
2017-01-01T12:08:10.060
31561
2017-02-03T07:26:42.353
20066
question
monaca onsen-ui angularjs
$applyを使っても$scopeに反映されない


thenに渡している関数は非同期で呼ばれるので、そのタイミングで$scope.$applyしても無駄です。  
$scope.$applyはthen内で呼ぶ必要があります。

[code]

    setTimeout(function () {
        getData().then(function(value) {
            $scope.$apply(function() {
                $scope.items = value;
                console.log(value);
            });
        });
    }, 3000);
    
[/code]


CC BY-SA 3.0
2017-01-01T14:04:07.037
31562
2017-01-01T14:04:07.037
4191
31561
answer