当服务在AngularJS中的控制器中完成加载时,如何更新指令

时间:2014-08-14 18:16:08

标签: angularjs asynchronous angularjs-directive

在AngularJS应用中,我有一个使用$http的服务并返回一个承诺。我有一个需要服务的控制器。在控制器DataService.then(function(data){ scope.viewModel.data = data;})

然后我有一个带隔离范围的指令。 scope: { data: '='}然后在指令中使用scope.data做一些事情。

最后是html

<div ng-controller="myCtrl">
    <div my-cool-directive="" data="viewModel.data"></div>
</div>

我的问题是这在鸡蛋情景之前呈现了一只鸡。当服务数据被硬编码时,一切都很顺利,但是当使用异步$http来实际调用服务器并获取数据时,scope.data在指令内是null。如何在服务调用完成并设置controller scope属性时正确获取指令所需的数据。我不希望该指令依赖于该服务。我更喜欢控制器将驱动指令模型。 $emit$broadcast是否可以使用$watch?基本上是什么?或者有一种首选方式吗?我确信其他人已经面临这个问题。我希望该指令继续具有隔离范围,因为我可能希望在某些时候扩展。我先尝试过谷歌,但我认为我没有正确地回答这个问题。

1 个答案:

答案 0 :(得分:4)

<div my-cool-directive="" data="viewModel.data" ng-if="viewModel.data"></div>

应该这样做。

您还可以在指令中创建监视,以便在数据从未定义更改为其他内容时调用监视的回调函数。