【问题标题】:ngModel not being set to the ngRepeat selected objectngModel 未设置为 ngRepeat 选定对象
【发布时间】:2014-02-06 21:39:43
【问题描述】:

我有一个 ngRepeat 可以查看对象数组。

我需要将选定的用户对象传递给我的 ngChange 函数。

<select 
    ui-select2
    id="entityDropDown" 
    ng-model="selectedUser" 
    ng-change="getUserInfo(selectedUser)">
        <option></option>
        <option ng-repeat="user in users">{{user.name}}</option>
</select>

但是,ngModal 只返回 user.name 而不是整个用户对象。

编辑:我不能在这里使用 ngOptions,因为我使用的是与 ngOptions 不兼容的 select2。

【问题讨论】:

  • 在这里使用ng-options 可以实现你想要的。
  • 是的,这就是我以前使用的,它运行良好,但后来我将 select2 引入了我的应用程序,不幸的是,它与 ngOptions 不兼容。这有点让人头疼,但在 UX 方面拥有 select2 确实有帮助
  • 需要设置选项值,如&lt;option ng-repeat="user in users" value="{{user.id}}"&gt;{{user.name}}&lt;/option&gt;

标签: javascript angularjs object angularjs-ng-repeat


【解决方案1】:

利用ng-value:

<select 
    ui-select2
    id="entityDropDown" 
    ng-model="selectedUser" 
    ng-change="getUserInfo(selectedUser)">
        <option></option>
        <option ng-repeat="user in users" ng-value="$index">
               {{user.name}}
        </option>
</select>

然后在你的控制器中:

var app = angular.module("myApp", [])
app.controller("MyCtrl", ['$scope', function($scope) {
    $scope.users = [
        {name: 'blah blah', something: 'else'}
    ]    ;
    $scope.getUserInfo = function(val) {
        console.log($scope.users[val]); //logs the object value that you want
    }
}]);

演示:http://jsfiddle.net/qwertynl/GENZ2/


或者你可以这样做:

HTML:

<select 
    ui-select2
    id="entityDropDown" 
    ng-model="selectedUser" 
    ng-change="getUserInfo(users[selectedUser])">
        <option></option>
        <option ng-repeat="user in users" ng-value="$index">
               {{user.name}}
        </option>
</select>

JS:

var app = angular.module("myApp", [])
app.controller("MyCtrl", ['$scope', function($scope) {
    $scope.users = [
        {name: 'blah blah', something: 'else'}
    ]    ;
    $scope.getUserInfo = function(val) {
        console.log(val);
    }
}]);

演示:http://jsfiddle.net/qwertynl/fBJYP/

【讨论】:

  • 将我选择的用户设置为字符串用户而不是对象。
  • 谢谢,我选择了第二个选项,这样我就不必对我的控制器做任何事情了。
  • 现在我们使用 value 来设置 ng-Modal,select 只显示占位符文本
  • 所选选项的值会干扰所选选项的值。因此,例如,在您的演示中,如果我选择了 blah blah,它只会显示占位符文本,而不是选择 blah blah。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多