angular 模型中的数据显示问题

Issue displaying data in angular model

我使用 ng-repeat 创建了一个下拉菜单,如下所示:

            <div ng-show="editConfig" class="input-group" theme="bootstrap" style="">
                <label class="config-row-element ">Product Type</label>
      <select class="dropdown-menu scrollable-menu form-control config-dropdown"  style="" ng-model="event.etype" id="etype">
          <option value="" selected disabled>Select a Product</option>
          <option ng-repeat="etype in etypes" ng-value="etype[0]">{{etype[1]}}</option>
      </select>
        </div>

在控制器中,所有 etype 都包含在一个数组中,其中每个 etype 包含两项:一项是选择必须存储在后端的名称,一项是显示名称。它看起来像这样:

$scope.etypes = [['gif','GIF Booth'], ['photo','Photo Booth'], ['ipad', 'iPad'], ['video','Video Booth'], ['print','#Print']];

从用户的角度来看,当他们选择一个选项时,他们会选择 Gif Booth、Photo Booth 等...但是,'gif'、'photo' 等会绑定到ng 模型 event.etype。所以现在当我尝试在他们不再编辑时显示选择时,会出现更丑陋的版本。

        <tr ng-hide="editConfig">
          <th>Product Type</th>
          <td style="overflow: hidden">{{event.etype}}</td>
        </tr>

有没有办法在 HTML 内轻松解决这个问题?提前致谢。

在您的控制器中,创建一个使用对象点表示法而不是嵌套数组的新作用域变量:

$scope.etypes = [['gif','GIF Booth'], ['photo','Photo Booth'], ['ipad', 'iPad'], ['video','Video Booth'], ['print','#Print']];
$scope.all_etypes = [];
for (var i=0; i < $scope.etypes.length; i++) {
    $scope.all_etypes.push({ id: $scope.etypes[i][0], name: $scope.etypes[i][1] });
}

此代码将创建一个名为 all_etypes 的新作用域变量,如下所示:

[
  { id: 'gif', name: 'GIF Booth' },
  { id: 'photo', name: 'Photo Booth' },
  { id: 'ipad', name: 'iPad' },
  { id: 'video', name: 'Video Booth' },
  { id: 'print', name: '#Print' },
]

这更容易使用。

现在,更新您的 HTML 以使用这个新的范围变量:

<div ng-show="editConfig" class="input-group" theme="bootstrap" style="">
    <label class="config-row-element">Product Type</label>
    <select class="dropdown-menu scrollable-menu form-control config-dropdown" style="" ng-model="event.etype" id="etype">
        <option value="" selected disabled>Select a Product</option>
        <option ng-repeat="etype in all_etypes" ng-value="etype.id">{{etype.name}}</option>
    </select>
</div>

<tr ng-hide="editConfig">
    <th>Product Type</th>
    <td style="overflow: hidden">{{event.etype.name}}</td>
</tr>

首先,最好使用如下对象:

$scope.etypes = [{'id':'gif','name':'GIF Booth'}, {'id':photo','name':'Photo Booth'}, {'id':ipad', 'name':'iPad'}, {'id':video','name':'Video Booth'}, {'id':'print','name':'#Print'}];

查看:

<div ng-show="editConfig" class="input-group" theme="bootstrap" style="">
   <label class="config-row-element ">Product Type</label>
      <select class="dropdown-menu scrollable-menu form-control config-dropdown"  style="" ng-model="event.etype" id="etype">
          <option value="" selected disabled>Select a Product</option>
          <option ng-repeat="etype in etypes" ng-value="etype">{{etype.name}}</option>
      </select>
</div>

第二个视图:

<tr ng-hide="editConfig">
  <th>Product Type</th>
  <td style="overflow: hidden">{{event.etype.name}}</td>
</tr>

要发送它,您必须过滤对象。

您可以更改模型和值以获取整个数组字符串,然后在更改时将其转换为数组。

           <div class="input-group" theme="bootstrap" style="">
            <label class="config-row-element ">Product Type</label>
  <select class="dropdown-menu scrollable-menu form-control config-dropdown"  ng-model="etype" ng-change="showEvent(etype)">
      <option value="" selected disabled>Select a Product</option>
      <option ng-repeat="etype in etypes" ng-value="etype">{{etype[1]}}</option>
  </select>
    </div>

您选择了:{{selected}}

在你的 js 中:

 $scope.showEvent = function(e){
  var array = e.split(',')
  $scope.selected = array[1];
}

这里是Plunker。我相信这就是您要找的。如果不是,请告诉我。可能我没有正确理解你的问题。