0

OK、コントローラーのスコープ変数にバインドされた select タグがあります。アプリが初期化されるとき、変数は空であるため、選択リストは 1 つの項目 (空の項目) で生成されます。

run 関数では、リストが初期化され、イベントがブロードキャストされます。コントローラーはブロードキャストを取得し、変数を 98 個の値で更新します。ただし、選択タグは更新されていないようです。

私は何を間違っていますか?

HTML:

    <select id='srcList' size='10'
        data-ng-model="data.source" 
        data-ng-options="s.title for s in data.srcList"></select><br>

JS:

.controller('rightSidebar', function($scope, dataProvider) {
    $scope.data = {};
    $scope.data.srcList = dataProvider.srcList;
    $scope.data.citeList = dataProvider.citeList;

    $scope.$on('SrcListRefresh', function () {
        $scope.data.srcList = dataProvider.srcList;
    });

    $scope.$on('CiteListRefresh', function () {
        $scope.data.citeList = dataProvider.citeList;
    });
});

コードをトレースしたところ、スコープ変数 data.srcList が更新されていることがわかりました。

4

2 に答える 2

0

問題は、非同期の indexedDB 関数にアクセスしていて、 $apply() 呼び出しが必要なことだと思います

于 2013-06-18T13:00:42.483 に答える
0

だから、あなたが言ったことのように聞こえるので、module.runメソッドからイベントを発行する方法がわかりません。

アプリケーションについて詳しく知らなくても、正常に動作しているように見える jsfiddle を作成しました。問題を誤解している可能性がありますが、そうでない場合は、この jsfiddle と比較して解決できるはずです。

http://jsfiddle.net/fMtv3/

function rightSidebar($scope, dataProvider) {
    $scope.data = {};
    $scope.data.srcList = dataProvider.srcList;
    $scope.data.citeList = dataProvider.citeList;

    $scope.$on('SrcListRefresh', function () {
        alert("Controller Scope Level - Handler SrcListRefresh");
        $scope.data.srcList = dataProvider.srcList;
    });

    $scope.$on('CiteListRefresh', function () {
        $scope.data.citeList = dataProvider.citeList;
    });
}

var myapp = angular.module("app", [], function ($routeProvider, $locationProvider) {});

myapp.run(function ($rootScope) {
    $rootScope.data = {
        srcList: null,
        citeList: null
    };

    //setTimeout the non angular way
    setTimeout(function () {
        $rootScope.$apply(function () {
            $rootScope.data.srcList = [{
                title: 'A'
            }, {
                title: 'B'
            }, {
                title: 'C'
            }];
        });

    }, 1000);

});

angular.element("#apphost").ready(function () {
    angular.bootstrap("#apphost", ['app']);
});

htmlコード

<div id="apphost">
     <select id='srcList' size='10' data-ng-model="data.source" data-ng-options="s.title for s in data.srcList"></select>
     <br> </div>
于 2013-06-13T15:14:57.870 に答える