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

当服务在AngularJS中的控制器中完成加载时,如何更新指令,angularjs,asynchronous,angularjs-directive,Angularjs,Asynchronous,Angularjs Directive,在AngularJS应用程序中,我有一个使用$http并返回承诺的服务。我有一个需要服务的控制器。在控制器中DataService.then(函数(数据){scope.viewModel.data=data;}) 然后我有一个带有隔离作用域的指令。 scope:{data:'='}然后对指令中的scope.data执行一些操作 最后是html <div ng-controller="myCtrl"> <div my-cool-directive="" data="vie

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

然后我有一个带有隔离作用域的指令。
scope:{data:'='}
然后对指令中的scope.data执行一些操作

最后是html

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

我的问题是这呈现了先鸡后蛋的情景。当服务数据被硬编码时,一切都很好,但是当使用async
$http
实际调用服务器并获取数据时,scope.data在指令中为null。当服务调用完成并且设置了控制器作用域属性时,如何正确地获取指令所需的数据。我不希望指令依赖于服务。我更喜欢控制器驱动指令模型。
$emit
$broadcast
是使用
$watch
的方法吗?基本上是比赛?或者有没有更好的方法?我肯定其他人也面临过这个问题。我希望指令继续具有隔离作用域,因为我可能希望在某个时候扩展它。我确实试过先用谷歌搜索,但我认为我的措辞不对


<div my-cool-directive="" data="viewModel.data" ng-if="viewModel.data"></div>
我们应该做到这一点

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


我们应该做到这一点


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

try,
DataService.then(function(data){$timeout(function(){scope.viewModel.data=data;}}),我将解释如果它工作会发生什么。它不能保证工作,为什么会有超时。。。一种方法是使用watch,或者使用Pub/Sub机制。我个人不喜欢eventing.try,
DataService.then(函数(数据){$timeout(函数(){scope.viewModel.data=data;}})),我将解释如果它工作会发生什么。它不能保证工作,为什么会有超时。。。一种方法是使用watch,或者使用Pub/Sub机制。但我个人不喜欢事件。这个解决方案实际上对我很有效。在数据进入范围之前,指令甚至不会被呈现[没有双关语]。我喜欢。干净简单。这个解决方案实际上对我很有效。在数据进入范围之前,指令甚至不会被呈现[没有双关语]。我喜欢。干净简单。