【问题标题】:Programmatically select an md-select option以编程方式选择 md-select 选项
【发布时间】:2019-11-16 11:35:17
【问题描述】:

我有一个 angular-material md-select 元素,具有多项选择,我这样定义:

<md-select ng-model="selectedTypes"
           ng-change="typesChanged()"
           multiple
           ng-disabled="availableTypes.length == 0">
           <md-option ng-repeat="type in availableTypes" ng-value="{{type}}">
              {{type.displayName}}
           </md-option>
</md-select>

在控制器加载期间,我从服务器加载可用类型的数组,然后将selectedTypes 设置为availableTypes[0](在加载availableTypes 之后)如下:

$scope.promise = Types.query(query, function (types) { // Types is a $resource
        $scope.availableTypes = types;
        $scope.selectedTypes = [$scope.availableTypes[0]];
});

因为selectedTypesmd-select 指令的模型,所以我预计它将使第一个选择选项成为选中状态。但它没有用。我在文档中找不到任何以编程方式选择 md-select 中的元素的方法。

【问题讨论】:

  • 因此,您希望在页面加载时在md-select 中选择一些预定义的值。对吗?
  • @nextt1 - 没错。但在某些情况下,由于其他状态更改(不仅是页面加载),我想以编程方式更改选择。所以我更喜欢找到一个不仅与页面加载相关的解决方案。

标签: angularjs angular-material


【解决方案1】:

由于您将md-selectmultiple 一起使用,因此您绑定到md-select 的模型必须是一个数组,并且您在代码中这样定义。

$scope.selectedTypes = [$scope.availableTypes[0]];

不代表数组。您只需将您在 md-option 中指定的值添加到该模型。

$scope.selectedTypes = []; //defined array
$scope.selectedTypes.push($scope.availableTypes[0]);

查看以下笔的工作示例。

http://codepen.io/next1/pen/qZKzMy

在您的代码中,您使用了ng-value="{{type}}。由于ng-value 是角度指令,因此您不应使用{{ }}。查看关于ngValue的官方文档

【讨论】:

  • 感谢您的回答。其实我也试过这个,但它不起作用。我假设我的代码和您的代码之间的区别在于使用回调,该回调在我的代码中使用来自服务器的结果 VS 在您的示例中使用线性的、没有回调流。你对此有什么想法吗?
  • 我认为由于您使用的是ng-value,因此您不需要{{ }},因为它是一个角度指令。如果您没有得到想要的结果,这可能是一个原因。 docs.angularjs.org/api/ng/directive/ngValue
  • 你是对的!这就是问题所在!在我接受之前,您能否编辑您的答案以包含此内容? (你可以留下例子,我认为它对以后的其他人参考会有好处)
  • 完全没问题。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 2019-07-20
  • 2017-07-09
  • 2011-10-07
相关资源
最近更新 更多