0

我对连接到一个对象的两个选择框有疑问。我创建了一个 plunker,但在那里很好,但在我的应用程序中却没有。基本上,我将代码中的所有内容都复制到了 plunker,它在那里工作,但不在我的代码中。这是链接:plnkr

    app.controller('MainCtrl', function($scope) {
      $scope.consoleLog = '';
      $scope.sites = [
{name: 'site1', id: 001, datasources:[
  {name: 'one', id: 441},
  {name: 'two', id: 442},
  {name: 'three', id: 443}
]},
{name: 'site2', id: 002, datasources:[
  {name: 'four', id: 444},
  {name: 'five', id: 445},
  {name: 'six', id: 446},
  {name: 'seven', id: 447}
]}];

$scope.selectedSiteIndx = 0;
$scope.selectedSite = $scope.sites[$scope.selectedSiteIndx].id;
$scope.selectedDs = $scope.sites[$scope.selectedSiteIndx].datasources[0].id;

$scope.selectedSiteChanged = function (selectedSite){
    var siteIndx = $scope.sites.map(function(e){return e.id}).indexOf(selectedSite);
    $scope.selectedDs = $scope.sites[siteIndx].datasources[0].id; 
    $scope.selectedSite = selectedSite;
    $scope.selectedSiteIndx = siteIndx;
};
$scope.selectedDsChanged = function(selDs){
    $scope.selectedDs = selDs;
    $scope.consoleLog += 'selected:'+selDs+', ';
};
    });

我有两个选择框。首先是选址。其次是数据源选择。当您在第一个框中选择一个站点时,第二个选择框会将其列表更改为来自新对象的嵌套数据源。它运行良好,没有问题。您可以更改站点,新数据将填充到第二个框中。我想选择一个默认选项(第一个选项可用)。因此,当您选择站点时,将自动选择该站点的第一个数据源。我的应用程序中的问题(由于某种原因不在 plnkr 中)是当我从 box2 中选择不同的数据源然后在第一个框中更改站点时。默认的第一个选项不会自动选择。在更改数据源之前,我可以多次更改站点,并且始终会选择数据源框 2 中的第一个选项。但是一旦我触摸数据源框,它就会停止。正如我所说,你可以' 在plnkr上看不到。我还注意到,当我更改站点时,数据源更改事件侦听器是由 datasource Id = null 触发的。但这只是在我触摸 2 号盒子后才发生的

任何想法为什么?我已经尝试了许多不同的选项,选择等。不能让它工作。我只想始终选择第一个可用选项。

4

1 回答 1

0

直到您不知道为什么这在您的应用程序中不起作用并且在 plunker 中起作用。

我只是会给你一种更清洁的方式来做同样的工作......他们最终可能会解决你的问题。

首先在这个plunker的工作中看到它

我只是使用整个对象而不是使用索引(这真的很混乱)

<select ng-options="site as site.name for site in sites"
   ng-model="selectedSite" ng-change="selectedDs = selectedSite.datasources[0]"></select>
<select ng-options="ds as ds.name for ds in selectedSite.datasources"
   ng-model="selectedDs"></select> 

请注意,这是site asandds as而不是site.idand ds.id

我也直接使用你的模型值的子集合selectedSite.datasources

在控制器中,我只是初始化值

$scope.selectedSite = $scope.sites[0];
$scope.selectedDs = $scope.selectedSite.datasources[0];

我在第一个输入上也有这个 ng-change

ng-change="selectedDs = selectedSite.datasources[0]"

希望它能神奇地解决你的问题。

于 2015-07-21T15:04:34.590 回答