2013-06-21 64 views
5

我有一个关于选择的部件和AngularJS的组合设置NG-模式问题(见视频:https://www.youtube.com/watch?v=8ozyXwLzFYs角+:选择值

我想这样做的是收件人设置为某个值,这将被预先选定。这里是HTML和JS这个例子(从视频)

<h1>Chosen</h1> 
    <select data-placeholder="Choose a Recipient" multiple class="span4 chzn-select" chosen 
     ng-model="recipients" ng-options="recipient.name for recipient in recipientsList"> 
    </select> 

    <p ng-repeat="recipient in recipients"><strong>{{recipient.name}}</strong></p> 

和JS在控制器

$scope.recipientsList = []; 
    $scope.recipients = []; 
    $scope.fetchRecipients = function() { 
     $http.get($scope.url).then(function(result){ 

     $scope.recipientsList = [ 
    {"id":0, "name":"Recipient 0"}, 
    {"id":1, "name":"Recipient 1"}, 
    {"id":2, "name":"Recipient 2"}, 
    {"id":3, "name":"Recipient 3"}, 
    {"id":4, "name":"Recipient 4"}, 
    {"id":5, "name":"Recipient 5"}, 
    {"id":6, "name":"Recipient 6"}, 
    {"id":7, "name":"Recipient 7"}, 
    {"id":8, "name":"Recipient 8"}, 
    {"id":9, "name":"Recipient 9"}, 
    {"id":10, "name":"Recipient 10"} 
]; 
    $scope.recipients = [{"id":0, "name":"Recipient 0"}, 
    {"id":1, "name":"Recipient 1"}]; 
    }); 
    } 

    $scope.fetchRecipients(); 

我尝试了一些组合,但是在菜单值没有预选,虽然他们是存储在收件人中,因为它们在菜单下方可见。你可以在这里看到这个例子: http://jsfiddle.net/YKZSw/8/

谢谢你的ansers。

马捷

回答

4

AngularJS ngOptions属性选择从作为数据源提供的阵列的元件。在你的情况下,recipientsList数组包含一定数量的对象。然而,由于对象不平等,即使它们相似,您希望预选的元素也不在列表中。 含义recipientsList:{“id”:0,“name”:“Recipient 0”}不等于收件人:{“id”:0,“name”:“Recipient 0”}(您可以在JS控制台)。 Angular在列表中找不到元素,因此不会预选。

此修改小提琴作品:http://jsfiddle.net/mananbharara/YKZSw/9/ 在这种情况下,唯一的区别是在你的收件人的定义:

$scope.recipients = [$scope.recipientsList[0], $scope.recipientsList[1]];

在这种情况下,你有一个列表,选择的值只能来自该列表。

如果您必须维护两个列表,您将使用此方法的替代方法是将选择值保留为基本类型。在这种情况下,原始的平等将始终成立。

+0

当涉及过滤器时,这种行为不会导致问题吗?这里是一个jsfiddle这个问题停止预选,有没有解决这个问题的任何建议? http://jsfiddle.net/wKMZM/13/ – ragche

+0

似乎你在设置'myModel'的初始值时犯了一个错误。你的标记暗示的是,当你将初始值设置为“Object”时,你希望绑定到字符串值。这是[更新的小提琴](http://jsfiddle.net/wKMZM/15/),似乎工作。 而不是做 '$ scope.myModel = {type:'ninjacat'};',看来工作的是:'$ scope.myModel ='ninjacat'' – manan

6

由于AngularJS版本1.1.5,他们添加了track by子句。

这应该有所帮助。在你的情况下,你可以通过id添加一个曲目。