Javascript 页面加载时不显示角度ng重复
我以前从未遇到过这个问题,但我有一个Angular控制器,它从信号器集线器中提取客户端连接数据列表,并将其显示在状态页面上。这是非常简单的东西 我的问题是:当页面加载时,控制器会运行并正确检索数据,但在我执行一些“碰撞”操作之前,它不会显示在页面上,比如在过滤器文本框中单击,然后从中单击。我实际上不必做任何改变数据的事情。我已经设置了一个断点,并验证了数据是否正确加载,以及它是否被分配给了作用域。我还尝试在数据加载后立即使用$scope.$apply(),但没有任何影响。以下是相关代码: 控制器:Javascript 页面加载时不显示角度ng重复,javascript,angularjs,Javascript,Angularjs,我以前从未遇到过这个问题,但我有一个Angular控制器,它从信号器集线器中提取客户端连接数据列表,并将其显示在状态页面上。这是非常简单的东西 我的问题是:当页面加载时,控制器会运行并正确检索数据,但在我执行一些“碰撞”操作之前,它不会显示在页面上,比如在过滤器文本框中单击,然后从中单击。我实际上不必做任何改变数据的事情。我已经设置了一个断点,并验证了数据是否正确加载,以及它是否被分配给了作用域。我还尝试在数据加载后立即使用$scope.$apply(),但没有任何影响。以下是相关代码: 控制器
angular.module('statusModule', ['utilitiesModule']).
controller('statusController', ['$scope', '$location', 'Util',
function ($scope, $location, Util) {
var gurcaHub = $.connection.gurcaHub;
var indexes = {};
var clients = [];
$scope.search = { domain: '' };
var refreshClientList = function () {
gurcaHub.server.getClients("", 0).done(function (result) {
angular.forEach(result, function (item) {
// omitted for brevity, all this does is massage the data a bit
clients.push(item);
});
$scope.clients = clients;
});
};
angular.element(document).ready(function () {
$.connection.hub.error(function (error) {
$scope.errorMsg = error;
});
$.connection.hub.start().done(function () {
gurcaHub.server.connectManager({ ManagerToken: "123" }).done(function () {
refreshClientList();
});
});
});
}]);
以下是相关的HTML:
<div class="panel panel-default" ng-repeat="item in clients | filter:search">
<div class="panel-heading">
<h3 class="panel-title">{{item.domain}} <span class="badge">{{item.numClients}}</span></h3>
</div>
<div class="panel-body">
<table class="table table-condensed">
<thead>
<tr>
<th>Type</th>
<th>Machine Name</th>
<th>Client ID</th>
<th>IP</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="client in item.clientList">
<td>{{client.Type}}</td>
<td>{{client.MachineName}}</td>
<td>{{client.ClientId}}</td>
<td>{{client.Ip}}</td>
</tr>
</tbody>
</table>
</div>
</div>
{{item.domain}{{item.numClients}}
类型
机器名
客户端ID
知识产权
{{client.Type}
{{client.MachineName}
{{client.ClientId}
{{client.Ip}
我确实卸下了过滤器,但仍然存在同样的问题。同样,我所要做的就是点击表单输入字段,然后再次去聚焦,所有的东西都会显示出来。我什么都不用打。数据就在那里,只有在你做了一些事情之后才会显示。在角度之后的赋值($scope.clients=clients;
)。forEach
在循环完成之前执行
试一试
您是否尝试包括
$scope.clients=[]代码>在哪里声明变量?这样,模型在DOM创建时可用。@kubuntu是一个很好的建议,但它没有改变任何东西-/你在哪里读到的angular.forEach
是异步的?据我所知,Angular的forEach是同步的。这就成功了!我以前从未见过$q,我需要研究它的功能。
....
function ($scope, $location, $q, Util) {
...
var refreshClientList = function () {
gurcaHub.server.getClients("", 0).done(function (result) {
angular.forEach(result, function (item) {
// omitted for brevity, all this does is massage the data a bit
clients.push(item);
});
// execute when done processing
$q.all(clients).then(function(){
$scope.clients = clients;
});
});
};
...
}]);