使用AngularJS在第一个选择标记上填写第二个选择标记?

时间:2017-06-16 15:33:22

标签: javascript html angularjs angular-ui-bootstrap angular-controller

我正在使用UI-Bootstrap,所以我可以使用它们Angular和bootstrap。我想从“controllerCountries”控制器具有的select标签访问该值,并使用该值作为填充选择“selectedServices”的参数。我想这样做是因为程序的逻辑是当我在select标签中选择国家/地区列表的国家/地区时,请使用该值来填充另一个选择标记。

我的HTML在这里:

<div  style="margin-top: 15px"  class="col-md-6">
     <div id="form-pais"class="form-group">
         <label class=" control-label">Country:</label>
         <div class="selectContainer">
              <select  ng-controller="controllerCountries" class="form-control" id="abvCountry" name="abvCountry" ng-model="countrySelected">
                   <option value="gt">Guatemala</option>
                   <option value="sl">El Salvador</option>
                    <option value="hn">Honduras</option>
               </select>
         </div>
     </div>
</div>
<div style="margin-top: 15px"  class="col-md-6">
   <div class="form-group">
       <label class=" control-label">Services:</label>
   <div ng-controller="controllerServices" class="selectContainer">
       <select  class="form-control" id="selectServices"ng-model="servicios" ng-options="y for (x, y) in serviciosgt" text="">
       </select>
   </div>

我的JS文件看起来像这样:

//Heres the list of services in the objects. I use this to fill the second select.
app.controller('controllerServices', function($scope)
{
     $scope.serviciosgt =
     {
          consMiami : "Consolidación Miami",
          contCompletosGT: "Contenedores Completos",
          cargMartConsolidadGT : "Carga Maritima Consolidada",
          cargAereaRegularGT: "Carga Áerea Regular"
    };

    $scope.serviciosSL =
    {
         contCompletosSl : "Contenedores Completos",
         cargMartConsolidadSl: "Carga Marítima Consolidada",
         cargAereaRegularSl: "Carga Áerea Regular"
    };

    $scope.serviciosHN =
    {
         contCompletosHN : "Contenedores Completos",
         cargMartConsolidadHN: "Carga Marítima Consolidada",
         cargAereaRegularHN: "Carga Áerea Regular"
    };
});

//Heres the controller to fill.
app.controller('controllerCountries', function($scope)
{
     $scope.countrySelected ='';
     $scope.$watch('countrySelected', function () {
          if($scope.countrySelected=="gt")
          {
               console.log("Select GT");

          }
          else if($scope.countrySelected=="sl")
          {
               console.log("Select SL");
          }
          else if($scope.countrySelected=="hn")
          {
               console.log("Select HN");
          }
     });
});

现在我可以访问第一个“controllerCountries”的值并在控制台上记录该值,但就是这样。而且,正如你所看到的,我用第一个对象填充选择,但我想让它们变成恐龙。任何人都可以帮助我。如果你看我的代码是错的,欢迎你修复它。

问候和感谢。

HTML view

1 个答案:

答案 0 :(得分:0)

首先,您不需要$watch,您可以在更改选择值(ng-model)时使用ng-change来触发回调。你可以在那里写下你的if陈述。

其次,请勿在选择中使用ng-controller,而是ng-options可以在<option>内动态放置嵌套的<select>元素。

最后,如果您想使用从选择数字1中选择的值填充选择数字2,只需在触发ngChange回调时引用正确的数据

$scope.onCountryChange = function (country) {
      if(country=="gt")
      {
           console.log("Select GT");
           $scope.serviciosgt = { ... };
      }
      else if(country=="sl")
      {
           console.log("Select SL");
           $scope.serviciosgt = { ... };
      }
      else if(country=="hn")
      {
           console.log("Select HN");
           $scope.serviciosgt = { ... };
      }
 };

你的选择看起来像这样

<select class="form-control" 
        name="abvCountry" 
        ng-change="onCountryChange(countrySelected)" 
        ng-options="country for country in countries" ng-model="countrySelected">
</select>

虽然

$scope.countries = ["gt", "sl", "hn"];