无法以编程方式在 Angular JS 中的 SELECT 元素上使用 2 方式绑定

Unable to use 2 way binding on SELECT element in Angular JS programmably

我遇到了最困难的时间来为 SELECT 元素进行双向绑定。我正在尝试以编程方式更改所选元素。我已经找到了几个 Whosebug 示例来绑定 SELECT 的更改事件,但我没有太多采用其他方式,您的应用程序代码会更改所选元素。

我发现有一些在 OPTION 元素上使用 ng-repeat 但我 a) 无法让它工作,b) 似乎不是 "Angular Way".

HTML代码:

<div ng-controller="SIController">
<select id="current-command" ng-model="currentCommand"
ng-options="c as c.label for c in availableCommands track by c.id"></select>
<button ng-click="changeSelectedOption()">Select "open"</button>

控制器代码:

var myApp = angular.module('myApp', []);

function SIController($scope) {

    $scope.availableCommands = [
        {id: 'edit',        label: 'Edit'},
        {id: 'open',        label: 'Open'},
        {id: 'close',       label: 'Close'}
    ];

    $scope.currentCommand = "close";
    $scope.changeSelectedOption = function() {
        $scope.currentCommand = 'open';
    };  
};

我可以验证 $scope.currentCommand 在单击按钮时发生了变化,但选项似乎没有被选中。

Fiddle here

我最近遇到了类似的问题。看看我的answer。您应该修改定义 ng-options 的方式。

function MyCtrl($scope) {
    $scope.values = [
        {name : "Daily", id : 1},
        {name : "Weekly", id : 2},
        {name : "Monthly", id : 3},
        {name : "Yearly", id : 4}];
    $scope.selectedItem = $scope.values[0].id;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
<div ng-app ng-controller="MyCtrl">
    <select ng-model="selectedItem" ng-options="selectedItem.id as selectedItem.name for selectedItem in values"></select>
    selectedItem: {{selectedItem}}
</div>

有工作吗 fiddle : http://jsfiddle.net/bzhkkw18/9/

为了解释我所做的,ng-click 和控制器中的函数名称不匹配。

主要部分是选项的定义。在您的 ng-options 中,您设置了所有对象。如果这是您真正想要的,您必须像这样在 currentCommand 中做同样的事情:

//Object 2 is close
$scope.currentCommand = $scope.availableCommands[2];