我在Angular中遇到这个烦人的错误,我将数据广播到指令,但指令的$on
没有收到它。
因此,我的桌子根本没有填充,对用户来说看起来很糟糕。
test_results.html(包含指令的实例):
<div>
<h1>Test Results</h1>
...
<results></results>
</div>
resultsCtrl.js控制器:
$timeout(function () {
$rootScope.$broadcast('show-results', test_session.question_objects);
}, 100);
results.html指令模板(大多数字段被删除):
<div class="results">
<table class="table table-bordered table-striped">
<thead>
<tr>
<td ng-if="average_times && !$root.is_mobile">
<span ng-click="sortType = 'question.average_timing'; sortReverse = !sortReverse">
Avg. Time
</span>
</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="q in questions | orderBy:sortType:sortReverse | filter:searchQuestions track by $index">
<td ng-if="q.average_timing && !$root.is_mobile" ng-click="$root.openDirections('question', q)">{{ q.average_timing }}</td>
</tr>
</tbody>
</table>
</div>
results.js指令:
scope.$on('show-results', function(event, test_session) {
setTestSessionData(test_session);
});
...
function setTestSessionData (test_session) {
scope.questions = test_session;
}
我无法弄清楚到底发生了什么。起初我以为是第一次加载网站的时候,但是我已经尝试了,因为数据已经呈现了。
答案 0 :(得分:0)
每当您执行$rootScope.$broadcast
时,通过$scope.$on
注册到这些事件的所有子范围都将捕获该事件。指令范围也是如此。如果在事件侦听器中更新模型,它将在视图中更新。