ng-options 将 ng-model 值设置为空白列表中的选定项

Posted

技术标签:

【中文标题】ng-options 将 ng-model 值设置为空白列表中的选定项【英文标题】:ng-options Set ng-model value as selected item in blank list 【发布时间】:2018-02-18 02:12:11 【问题描述】:

我在这里使用 ng-options 有不同的情况

我的应用有两种模式。新模式和编辑模式

我有 SELECT DISTRICTS 和 VILLAGES 的输入类型。使用 DISTRICT 选择的 ng-change 事件基于 DISTRICT 选择填充 VILLAGES 选择。这在 NEW 模式下运行良好。

但在 EDIT 模式下,DISTRICT 正确显示 ng-model 的值。但是 VILLAGE 选择输入项没有显示 ng-model 值。这是因为,村庄选择中没有填充任何项目,因为 DISTRICT 的 ng-change 事件永远不会在 EDIT 模式下触发。

我仍然想将 VILLAGE 的 ng-model 值显示为下拉列表中的选定项,即使它没有任何选项。 (在编辑模式下)

关于如何做到这一点的任何想法?请多指教

下面是 DISTRICT 选择的代码

                            <select class="form-control" name="district" id="field_district" ng-model="vm.apeksha.district" required 
                        ng-change="vm.updateblocks(vm.apeksha.district)"
                        ng-options="x.malDistName as x.malDistName for x in vm.masterDistricts " >

这里是VILLAGE选择输入项的代码

                   <select class="form-control" name="village" id="field_village" ng-model="vm.apeksha.village" 
                            ng-options="village.M as village.M for village in vm.villagelist track by village.M"
                            required >
                            <option value=" vm.apeksha.village "> vm.apeksha.village </option>
                                    </select>  

即使“vm.apeksha.village”上有值也不显示选项项

在控制器中,我们有一个函数,它使用工厂来更新对应于每个 DISTRICTS 的数据列表。这是他的控制器代码

      /**
       * Update dropdown boxes of VILLAGES, THALUKS, PO AND BLOCS
       * based on district selection
       */
    vm.updateblocks = function(districtName) 
        vm.blockslist = masterDataPopulator.getBlocksForDistrict(districtName);
        vm.postofficelist = masterDataPopulator.getPostOfficesForDistrict(districtName);
        vm.villagelist = masterDataPopulator.getVillagesForDistrict(districtName);
        vm.thalukList = masterDataPopulator.getTaluksForDistrict(districtName);

      ;

有什么办法吗?

【问题讨论】:

这是一个好故事,但如果您没有发布代码,没有人可以帮助您。请发布代码 sn-p 示例或更好的代码 - 演示您的 ptoblem 的演示 添加了代码。请看一下 它唯一的 html 部分,请用数据发布控制器 对不起。我现在也更新了控制器代码。请看一下 提供的答案没有解决问题。有什么帮助吗? 【参考方案1】:

我建议你在这种情况下使用ng-options 而不是带有&lt;option&gt; 标签的ng-repeat

以上是分类列表。选择一个类别将加载带有子类别的下拉列表,如下所示,

类别

<select class="home_search_select" name="d1" ng-model="selectedd1" ng-change="homeChanged()" ng-options="cat as cat.category_name for cat  in categorydata track by cat.category_id" id="d1">
      <option ng-value="">Select Category</option>
    </select>

子类别

<select class="home_search_select" name="d2" id="d2" ng-model="selectedd2" ng-options="subcat.ID as subcat.Name for subcat in selectedd1.Subcategory track by subcat.ID">
      <option class="home_search_select" value="">Select Sub Category</option>
</select>

当第一个被选中时,将值绑定到 ng-change 事件中第二个下拉列表的 ng-model

$scope.homeChanged=function()
    console.log($scope.selectedd1)
  
  $scope.selectedd2 =
      "Name": "Two Wheeler",
      "ID": "1"
    ;

LIVE DEMO

【讨论】:

但是,我只使用 ng-options。我没有在这里使用 ng-repeat。此外,在 EDIT 模式期间,不会发生 ng-change 事件,因为用户可能不会更改 DISTRICT,但仍必须显示 VILLAGE,这已在将其添加为新记录时指定(新模式) 对此有什么帮助吗?

以上是关于ng-options 将 ng-model 值设置为空白列表中的选定项的主要内容,如果未能解决你的问题,请参考以下文章

关于ng-option

ng-options用法详解

ng-options 如何设置第一个选择总是空白

ng-options语法详解

如何使用代码中的ng-options更改选择中的值?

AnjularJs-Select添加数据并设置默认值