2
我正在尝试创建一个在执行控制器之前运行的Angular服务。我知道我可以使用控制器的“解析”属性,但这让我重复遍及我的所有控制器。如何在服务完成之前延迟控制器执行
那么如何创建一个使用Ajax请求并让控制器等待其执行的服务?
感谢
我正在尝试创建一个在执行控制器之前运行的Angular服务。我知道我可以使用控制器的“解析”属性,但这让我重复遍及我的所有控制器。如何在服务完成之前延迟控制器执行
那么如何创建一个使用Ajax请求并让控制器等待其执行的服务?
感谢
这是不可能然而延迟控制器,可以确保业务加载它传递到范围之前或刷新范围时,它的变化。有几种不同的方式来做到这一点:
范围创建一个变量只有当服务被加载:
MyService.get({}, function(serv) {
self.original = serv;
$scope.serv = new MyService(self.original);
});
如果您正在使用$http
而不是等待成功的价值传递给范围。
$http({method: 'GET', url: '/someUrl'}).
success(function(data, status, headers, config) {
// --- do your thing here ---
}).
error(function(data, status, headers, config) {
});
使用$watch
,看是否有变量被更新或不:
scope.$watch('myVariableToWatch', function(value) {
scope.myVariableToWatch = value;
})
最后,你也可以选择隐藏任何视图元素,直到该服务被加载,所以HTML是:
<div ng-show="serviceDidLoad"> some content here </div>
将$scope.serviceDidLoad = true
控制器,你测试一下,看看该服务已被加载
非常感谢。这是一个很好的解释! – user1732055