尝试使用ng-grid和ASP.NET MVC创建简单的工作应用程序。客户方:
var app = angular.module('TestApp', ['ngGrid'])
app.controller('MainController', function ($scope, $http) {
$scope.addresses = []
$scope.filterOptions = {
filterText: "",
useExternalFilter: true
};
$scope.update = function () {
$http.get('/Home/GetData', {
params: { filter: $scope.filterOptions.filterText }
})
.then(function (result) {
$scope.addresses = result.data
//alert(JSON.stringify(result))
})
$scope.$apply()
}
$scope.update()
$scope.gridOptions = {
data: 'addresses',
headerRowHeight: '50',
columnDefs: [
{ field: 'country', headerCellTemplate: '<table><tr><td>Country</td></tr><tr><td ng-controller="MainController"><input type="text" placeholder="" ng-model="filterOptions.filterText"/></td></tr></table>' },
{ field: 'city'},
{ field: 'street'},
{ field: 'house'},
{ field: 'zipcode'},
{ field: 'datec'}
]
};
$scope.$watch('filterOptions', function (newVal, oldVal) {
if (newVal !== oldVal) {
$scope.update()
}
}, true);
我可以看到我从以下方面获得了正确的数据:
public ActionResult GetData(string filter)
{
var query = from c in db.Addresses where c.country.Contains(filter) select c;
return Json(query.ToList(), JsonRequestBehavior.AllowGet);
}
在我的代码中,调用.then回调,我可以浏览所有返回的adin data.addresses。然而,网格中没有显示任何内容。控制台中没有出现错误。
答案 0 :(得分:2)
对于遇到此问题的其他人,此问题已由更多人here
记录问题,我认为(因为我从来没有时间深入研究模块以了解发生了什么),任何缓存的对象引用都将与其模板表示一起重用。我只能通过改变一些对象来重现这个问题,但在我通过过滤/排序管道从ui-grid处理输入数据之后,这也发生在我身上。最后,我将有一个包含新对象和旧对象(引用)的数组,并且对象也会发生变异。
所以最后,当我遇到这个问题时,我使用了angular.copy
$scope.uiGridOptions.data = angular.copy(theNewResultedArray);
使用它更像是一种解决方法,并且要小心,因为它有一些性能影响,并且只有在数据未成功更新时才应限制此用例。
答案 1 :(得分:1)
旁注。什么对我有用(我得到同样的错误)是打电话 gridApi.core.refresh()
这是导致IE刷新网格的原因,即使在模态上更新双向绑定数据也是如此。
答案 2 :(得分:0)
我也在使用Angular 1.3的beta版本时遇到了这个问题。
我通过更新到最新版本(1.3.10)修复了它。