嵌套指令和角度中的异步数据

时间:2015-03-09 13:11:35

标签: angularjs angularjs-directive

我几乎所有的代码都在指令中分开了。这很好,因为指令变得非常简短,具体而且明确了他们打算做什么。

E.g。我的地址表单是一个单独的指令,我可以在需要的地方嵌套,例如用户个人资料表格。

<form name="userform">
    ...some inputs...
    <my-address-form my-address="user.address">
</form>

问题是,该地址具有从服务器获取的国家/地区选项。在用户的情况下,这导致两种可能的情况: 我将地址输入直接绑定到'='范围属性

<div ng-form="addressform">
    <my-dropdown name="country" ng-model="myAddress.country" my-options="asyncCountries">
</div>

然后发生的是指令在加载国家之前呈现,并且未设置下拉列表。

第二个选项是在address指令中使用单独的地址对象,等待加载选项然后传递数据。但是,地址指令之外的变化不会被反映出来。

将解析对象放在我的路由配置上的解决方案也没有帮助,因为解析后的数据无法注入指令(它们只会被注入到路由中定义的控制器中)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

当我看到my-options="asyncCountries"时,我假设你已经在你的指令中声明了你的范围绑定:scope:{myOptions: '='}

您传递给my-options的对象也可以是承诺。如果您在应用程序中使用$q,那么您可以在指令中执行以下操作:

$q.when($scope.myOptions).then(function(data){
    //begin to build your options here.
});

$ q.when()可以接收承诺或对象。如果是承诺,data将是您的承诺返回的对象。如果它是一个对象,data将成为此对象。