2013-05-29 61 views
2

我正在尝试创建一个在执行控制器之前运行的Angular服务。我知道我可以使用控制器的“解析”属性,但这让我重复遍及我的所有控制器。如何在服务完成之前延迟控制器执行

那么如何创建一个使用Ajax请求并让控制器等待其执行的服务?

感谢

回答

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控制器,你测试一下,看看该服务已被加载

+0

非常感谢。这是一个很好的解释! – user1732055

相关问题