API调用完成之前的AngularJS双向绑定
我使用一个基本的API调用来获取要在表中显示的项目数组。我的表加载得非常好,但我注意到Angular抛出了一系列错误,告诉我它不能插值表达式,等等 我意识到这是因为在页面加载和API调用响应之间的一瞬间,Angular试图呈现表,并且显然会出错,因为用于填充表的数组还不存在 因此,解决这个问题的标准方法是什么?我应该简单地使用API调用完成之前的AngularJS双向绑定,angularjs,Angularjs,我使用一个基本的API调用来获取要在表中显示的项目数组。我的表加载得非常好,但我注意到Angular抛出了一系列错误,告诉我它不能插值表达式,等等 我意识到这是因为在页面加载和API调用响应之间的一瞬间,Angular试图呈现表,并且显然会出错,因为用于填充表的数组还不存在 因此,解决这个问题的标准方法是什么?我应该简单地使用ng If或ng hide停止渲染,直到API调用完成,还是有其他方法告诉angular在渲染DOM之前“等待” 我还可以通过初始化数组来解决这个问题,比如$scope.d
ng If
或ng hide
停止渲染,直到API调用完成,还是有其他方法告诉angular在渲染DOM之前“等待”
我还可以通过初始化数组来解决这个问题,比如$scope.dataArray=[]
,但我觉得在处理复杂的JSON对象时,这是一个麻烦,因为这些JSON对象有许多需要初始化的数组和对象
有人能解释一下最好的方法吗?你自己找到的解决方案是正确的。即使您正在输入一个空的范围变量或集合,框架也可以。它不会接受的是一个完整的空引用 为了避免玷污您的控制器,请考虑将一些模型放入父控制器,并嵌套相关对象,即
$scope.magic[]
,其中包含$scope.magic.user
,等等
这就是福音 另一种处理方法是使用路由器或状态提供程序上的
resolve
属性
使用ui路由器
的$stateProvider
可以执行以下操作:
.state('mystate', {
controller: function($scope, data) {
$scope.data = data;
},
resolve: {
data: ['$http', function($http) {
return $http.get('/api/get-data');
}]
}
})
来自$http.get()
的承诺将在实例化控制器之前得到解决。这与使用ngRoute
的方式相同
- $routeProvider(
)文档:$routeProviderngRoute
- 视频显示解决方案:
- 另一个解释解决方案的博客:
ng hide
或ng clope
。我尝试了ng hide和ng If,但它们仍然显示这些错误。到目前为止,唯一的“修复”是将模板中使用的任何数组初始化为[]
。。唯一的问题是,如果我们的页面使用15个不同的数组,那么在通过API从服务器检索数据之前,我们必须将所有这些数组初始化到$scope