Angular.js动态字段生成

时间:2013-09-14 01:36:39

标签: angularjs angularjs-directive

我要做的是根据传递给我的数据制作一些动态的收音机/复选框字段。不幸的是,我无法控制这些数据的格式,但完成工作应该没问题。

据我所知:http://plnkr.co/edit/LKwueHUzSrC5JpeBY9So

我最终需要最终得到的数据格式是一个简单的数组:

"school_type": [
    "Government/State",
    "International",
    "Co-educational"
]

此数据可能来自收音机框,也可能来自复选框(如果已选中)。如果只有一个选项,则显示复选框,如果有多个选项,则显示无线电。

所以我可以显示字段,但我遇到的问题是:

  1. 单选按钮上的name属性似乎不起作用 每一套。
  2. 我无法弄清楚如何将复选框/收音机的值选中...返回控制器并进入我需要的数组。我认为最简单的方法是使用可用的ng-change属性并将一个函数传递给它但是我每次尝试都会遇到错误。
  3. 任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您的代码存在以下几个问题:

  1. 您不需要在需要的地方使用插值;
  2. 您没有将控件绑定到范围;
  3. 这是您的更新代码:

    <label ng-switch-when="r" class="radio">
      <div ng-repeat="option in options">
        <input type="radio" name="{{fieldname}}" ng-model="$parent.$parent.selectedid" value="{{option}}">
        <span>{{ option }}</span>
      </div>
    </label>
    <label ng-switch-when="c" class="checkbox">
      <input type="checkbox" name="{{fieldname}}" ng-false-value="" ng-true-value="{{options[0]}}" ng-model="$parent.selectedid">
      <span>{{ options[0] }}</span>
    </label>
    

    请注意,为了正确绑定控件,我必须使用$parent.$parent作为单选按钮,$parent作为复选框。这是必需的,因为ng-switchng-repeat都会创建新的子范围。所以我不得不上升一个级别的复选框和两个单元格的单选按钮。如果您使用对象而不是基元进行绑定,则可以避免这种情况。我建议你尝试重构你的代码,这样就可以了。这个article有更多关于此事的信息。

    最后,这是你的Plunker working version