好的,我有一个绑定到控制器范围变量的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得到了更新。
答案 0 :(得分:0)
所以,我不确定如何从module.run方法发出事件,因为它听起来就像你说的那样。
在不了解您的应用程序的情况下,我已经制作了一个似乎正常工作的jsfiddle。我可能会误解你的问题,但如果没有,你应该能够与这个jsfiddle进行比较来解决它。
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()调用