我几乎所有的代码都在指令中分开了。这很好,因为指令变得非常简短,具体而且明确了他们打算做什么。
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指令中使用单独的地址对象,等待加载选项然后传递数据。但是,地址指令之外的变化不会被反映出来。
将解析对象放在我的路由配置上的解决方案也没有帮助,因为解析后的数据无法注入指令(它们只会被注入到路由中定义的控制器中)。
有什么建议吗?
答案 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
将成为此对象。