0

好的,我有一个绑定到控制器范围变量的选择标记。当应用程序初始化时,变量为空,因此选择列表生成一个项目 - 空项目。

在 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

所以,我不确定如何从 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 回答
0

我相信问题是我正在访问异步的 indexedDB 函数,需要 $apply() 调用

于 2013-06-18T13:00:42.483 回答