在控制器内的http调用之后加载部分文件

时间:2014-05-10 05:15:52

标签: angularjs angularjs-directive angularjs-scope angularjs-routing

我有一个控制器和一个部分文件。部分文件尝试访问由控制器设置的变量。但是这里的问题是控制器通过进行http调用来填充变量的范围对象,并且由于这个ajax请求,当http调用返回数据时,部分文件已经被加载,因此我将变量作为未定义。此外,虽然在浏览器上加载了部分文件,但是在http响应返回后,范围值被绑定后,数据会在延迟后填充。

AngularJs中是否有一种方法,只有在控制器中的http调用获取数据后才加载部分文件/指令,以便视图立即加载数据,而不是在延迟之后加载。请让我知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果您正在讨论ng-view中加载的部分内容,您可以使用路线上的$routeProvider resolve属性。此属性可以采用返回值或promise的函数。在承诺的情况下,只有在解决了承诺后才会加载视图。您的代码看起来像

 $routeProvider.when('/', {
            templateUrl: 'app.html', 
            controller:myAppController, 
            resolve:{
                data:function($http){
                    return $http.get('url');   //this by default returns promise.
                }
            }
        });

现在,您可以在控制器中注入resolve的data属性作为参数并访问数据。

也请观看此视频,了解解决方法http://www.thinkster.io/angularjs/6cmY50Dsyf/angularjs-resolve-conventions