Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
API调用完成之前的AngularJS双向绑定_Angularjs - Fatal编程技术网

API调用完成之前的AngularJS双向绑定

API调用完成之前的AngularJS双向绑定,angularjs,Angularjs,我使用一个基本的API调用来获取要在表中显示的项目数组。我的表加载得非常好,但我注意到Angular抛出了一系列错误,告诉我它不能插值表达式,等等 我意识到这是因为在页面加载和API调用响应之间的一瞬间,Angular试图呈现表,并且显然会出错,因为用于填充表的数组还不存在 因此,解决这个问题的标准方法是什么?我应该简单地使用ng If或ng hide停止渲染,直到API调用完成,还是有其他方法告诉angular在渲染DOM之前“等待” 我还可以通过初始化数组来解决这个问题,比如$scope.d

我使用一个基本的API调用来获取要在表中显示的项目数组。我的表加载得非常好,但我注意到Angular抛出了一系列错误,告诉我它不能插值表达式,等等

我意识到这是因为在页面加载和API调用响应之间的一瞬间,Angular试图呈现表,并且显然会出错,因为用于填充表的数组还不存在

因此,解决这个问题的标准方法是什么?我应该简单地使用
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(
    ngRoute
    )文档:$routeProvider
  • 视频显示解决方案:
  • 另一个解释解决方案的博客:

我对此也感兴趣。通常,我会根据场景选择
ng hide
ng clope
。我尝试了ng hide和ng If,但它们仍然显示这些错误。到目前为止,唯一的“修复”是将模板中使用的任何数组初始化为
[]
。。唯一的问题是,如果我们的页面使用15个不同的数组,那么在通过API从服务器检索数据之前,我们必须将所有这些数组初始化到
$scope