我正在尝试创建一个在执行控制器之前运行的Angular服务。我知道我可以使用控制器的'resolve'属性,但这让我在所有控制器中重复这个。
那么如何创建一个使用某些Ajax请求并让控制器等待执行的服务呢?
由于
答案 0 :(得分:1)
但是,无法延迟控制器,您可以确保在将服务传递到范围之前加载服务,或者在更改范围时刷新范围。有几种不同的方法可以做到这一点:
仅在加载服务时在范围内创建变量:
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
放在您测试的控制器中,以查看服务是否已加载