0

我有以下控制器,它基本上调用 http get 服务并将数据分配给show_data范围变量

.controller('forms_controller', function($scope, Form) {

Form.get().then(function(data){
    $scope.show_data = data;
});


});

然后scope.show_data将其推送到此视图..

<div ng-repeat="(key, value) in show_data | orderBy:'key' " >
<div ng-switch on="value.Type" >
    <div ng-switch-when="attributes" >
        <div ng-repeat="(key2, value2) in value | orderBy:'key' ">

            <div ng-switch-when="Date" >                            
                <label class="item item-input">
                    <span class="input-label">{{value2.Label}}</span>
                    <input identifier="{{value2.Identifier}}" type="date">
                </label>
            </div>

            <div ng-switch-when="Select" >
                <label class="item item-input item-select">
                    <div class="input-label">
                    {{value2.Label}}
                    </div>
                        <select codelist="{{value2.CodeList}}" identifier="{{value2.Identifier}}" >
                    </select>
                </label>
            </div>

        </div>
    </div>
</div>

它基本上根据输入类型检查数据并根据数据吐出不同的表单元素。我的问题是我面临的是选择框...每个选择框都有一个 id [codelist in this case]ng-options但是,我首先需要进行另一个 http get 调用来获取此数据在填充 ng-options 之前...
还请注意,每个表单可能有多个选择框。

我正在考虑使用某种自定义指令来实现这一目标?
任何帮助将不胜感激:)
谢谢

4

1 回答 1

0

您的问题是服务器向您发送了一个“不完整”的对象。您需要执行额外的获取请求以“完成”您的对象。

所以这就是你应该做的:在你的控制器中,迭代你的对象并执行额外的 get-requests 并将结果存储在你可以在你的 html 中调用的东西中value2.items

您不必等待设置,$scope.show_data直到获取所有数据。Angular 的双向绑定将在附加信息可用时立即同步 html。

像这样的东西应该工作。

var n = 0;
for (;n < data.length; n += 1) {
    var values = data[n].value
    var i = 0;
    for (;i < values.length; i += 1) {
        // GET based on values[i].CodeList
        $http.get(...)
        .success(function (data2) {
             values[i].items = data2
             // Retrieveable in HTML as value2.items
        });
    }
}
于 2015-06-23T12:44:21.827 回答