【发布时间】:2015-02-03 08:54:40
【问题描述】:
我使用 $http 获取数据并每 1 秒刷新一次(服务器轮询):
(function tick(){
$http.get('http://api.openweathermap.org/data/2.5/group?id=524901,703448,2643743&units=metric')
.success(function (data) {
console.log('tick');
$scope.cities = data.list;
$timeout(tick, 1000);
});
})();
这些数据使用 ng-repeat 指令显示在表格中,我显示了一个引导下拉菜单:
<tr ng-repeat="city in cities">
<td>{{city.name}}</td>
<td>
<div class="dropdown">
<button type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
<li><button>Buttons</button></li>
<li><button>Are closed</button></li>
<li><button>When $scope variable</button></li>
<li><button>is refreshed</button></li>
</ul>
</div>
</td>
</tr>
问题是当我打开下拉菜单时,它会在函数 tick() 运行后立即关闭。
我尝试比较来自 $http.get 和 scope 的数据,如果它们相同,则不更新 $scope。但是,即使 $http.get 被触发,下拉菜单也会关闭即使我没有更新范围变量。
我希望能够在不关闭的情况下轮询和显示下拉菜单。但是,如果在数据真正更改但不是在每次民意调查时关闭下拉菜单,这将是合理的。
这是一个显示效果的plunker:http://plnkr.co/edit/yqYsQ32XaAhZEsD2XWMu?p=preview
【问题讨论】:
标签: javascript angularjs twitter-bootstrap drop-down-menu angularjs-ng-repeat