与 optgroup 合作以有条件地显示 select 选项?
working with optgroup to show select options conditionally?
我正在尝试根据之前的 selected 选项框值显示 select 选项框。为此,我使用 ng-show:
<select ng-model="formDate">
<option value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
</select>
<select ng-model="whatever">
<optgroup ng-show="formDate == 'one'" label="A">
<option value="a">a</option>
</optgroup>
<optgroup ng-show="formDate == 'two'" label="B">
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
</optgroup>
<optgroup ng-show="formDate == 'three'" label="C">
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
</optgroup>
这里的问题是第三个选项框没有正确打开!
我看到的是,如果我为 optgroup B 设置较少的选项,那么第三个 optgroup 会正确打开..
直播:http://plnkr.co/edit/Q4j2hdCfiCZI1TbuwZ8v?p=preview
该错误发生在 chorme 上,但 ff 和 ie10 根本不起作用..
有什么建议吗?
提前致谢!
切换选项的正确方法是将选项移动到控制器中的数组变量中,并在需要的时间和位置对其进行过滤。
如果这对您不起作用并且想要使用此实现,您将不得不使用 ng-if 而不是 ng-show。
<optgroup ng-if="formDate == 'one'" label="A">
<option value="a">a</option>
</optgroup>
<optgroup ng-if="formDate == 'two'" label="B">
<option value="b">b</option>
</optgroup>
这里发生的是所有三个选项组都在 DOM 中呈现,这在语法上是错误的,这使得浏览器默认选择第三个。 ng-if 不会渲染 DOM 除非满足条件。
我认为您应该使用多个 select 而不是 optgroup - 因为 optgroup 应该将选项细分为单个 select,而不是多个 select 框。
<select ng-show="formDate == 'one'">
<option value="a">a</option>
</select>
<select ng-show="formDate == 'two'">
etc..
这是一个修改后的插件,其中 optgroups 被转换为 selects,随后的 select 或 show/hide 相应地:
我正在尝试根据之前的 selected 选项框值显示 select 选项框。为此,我使用 ng-show:
<select ng-model="formDate">
<option value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
</select>
<select ng-model="whatever">
<optgroup ng-show="formDate == 'one'" label="A">
<option value="a">a</option>
</optgroup>
<optgroup ng-show="formDate == 'two'" label="B">
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
<option value="b">b</option>
</optgroup>
<optgroup ng-show="formDate == 'three'" label="C">
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
<option value="c">c</option>
</optgroup>
这里的问题是第三个选项框没有正确打开!
我看到的是,如果我为 optgroup B 设置较少的选项,那么第三个 optgroup 会正确打开..
直播:http://plnkr.co/edit/Q4j2hdCfiCZI1TbuwZ8v?p=preview
该错误发生在 chorme 上,但 ff 和 ie10 根本不起作用..
有什么建议吗?
提前致谢!
切换选项的正确方法是将选项移动到控制器中的数组变量中,并在需要的时间和位置对其进行过滤。
如果这对您不起作用并且想要使用此实现,您将不得不使用 ng-if 而不是 ng-show。
<optgroup ng-if="formDate == 'one'" label="A">
<option value="a">a</option>
</optgroup>
<optgroup ng-if="formDate == 'two'" label="B">
<option value="b">b</option>
</optgroup>
这里发生的是所有三个选项组都在 DOM 中呈现,这在语法上是错误的,这使得浏览器默认选择第三个。 ng-if 不会渲染 DOM 除非满足条件。
我认为您应该使用多个 select 而不是 optgroup - 因为 optgroup 应该将选项细分为单个 select,而不是多个 select 框。
<select ng-show="formDate == 'one'">
<option value="a">a</option>
</select>
<select ng-show="formDate == 'two'">
etc..
这是一个修改后的插件,其中 optgroups 被转换为 selects,随后的 select 或 show/hide 相应地: