在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
?基本上是什么?或者有一种首选方式吗?我确信其他人已经面临这个问题。我希望该指令继续具有隔离范围,因为我可能希望在某些时候扩展。我先尝试过谷歌,但我认为我没有正确地回答这个问题。
答案 0 :(得分:4)
<div my-cool-directive="" data="viewModel.data" ng-if="viewModel.data"></div>
应该这样做。
您还可以在指令中创建监视,以便在数据从未定义更改为其他内容时调用监视的回调函数。