angularjs选择在绑定变量更改时不更新

时间:2013-06-13 14:14:29

标签: javascript select angularjs

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

在run函数中,列表被初始化,并且事件被广播。控制器获取广播并使用98个值更新变量。但是,select标签看不到更新。

我做错了什么?

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得到了更新。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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