2014-04-24 19 views
1

我试图预先选择多个对象到jQuery中使用Angular选择控件。见我Plunkr这里:http://plnkr.co/FNlTAcILnoeyjZat1tH1更新jQuery选择Angular的值

的数据被设置到模型在我的控制器像这样:

$scope.valueTypes = [ 
    { code: 'V1', name: 'Value 1', description: 'Description 1' }, 
    { code: 'V3', name: 'Value 3', description: 'Description 3' } 
]; 

我选择的包装指令看起来像这样:

.directive('myChosen', ['$log', function ($log) { 
    return { 
     link: function (scope, element, attrs) { 
      var model = attrs.ngModel; 
      if (model !== null) { 
       scope.$watch(model, function (data) { 
        $log.info('Model updated: ' + angular.toJson(data)); 
        element.trigger('chosen:updated'); 
       }); 
      } 

      element.chosen(); 
     }, 
     require: 'ngModel', 
     restrict: 'A' 
    }; 
}]) 

和使用方法如下:

<select id="valueType" name="valueType" class="form-control chosen-select" ng-options="valueType as valueType.code + ' - ' + valueType.name for valueType in getValueTypes()" ng-model="valueTypes" multiple="" my-chosen ng-required="true"> 

with getValueTypes()返回对象列表:

$scope.getValueTypes = function() { 
    var valueTypes = []; 
    for (var i = 0; i < 5; i ++) { 
     valueTypes.push({ 
      code: 'V' + i, 
      name: 'Value ' + i, 
      description: 'Description ' + i 
     }); 
    } 
    return valueTypes; 
}; 

但是,没有预先选定。如果我切换到我的选择列表和预选值的字符串列表,则会正确预选值。

那么,我该如何做预选工作呢?

谢谢!

回答

2

问题是Angular使用对象引用相等性来决定是否选择了一个选项。

关闭我的头顶,我能想到的两种可能的解决方案:

  1. 使用某种标识,而不是整个对象作为选择
  2. 价值确保您使用的实际对象,而不是碰巧具有完全相同的特性

#1另一个对象,改变你ng-options属性看起来像这样:

valueType.code as valueType.code + ' - ' + valueType.name for valueType in getValueTypes() 

(注意valueType.code一开始,而不是只valueType

#2,你在这种情况下,你需要改变你的初始化代码,但我怀疑,在一个“真正的”应用程序,您可能需要改变你填充值的方式:

$scope.valueTypes = []; 
// ... 
$scope.getValueTypes = function() { 
    var valueTypes = []; 
    for (var i = 0; i < 5; i ++) { 
     var obj = { 
      code: 'V' + i, 
      name: 'Value ' + i, 
      description: 'Description ' + i 
     }; 
     valueTypes.push(obj); 
     if (i == 1 || i == 3) { // or whatever 
      $scope.valueTypes.push(obj); // now it's the same object 
     } 
    } 
    return valueTypes; 
}; 
2

引自angular select documentation

ngModel比较参考,并不值

ng-model被引用到$scope.valueTypes,但你的ng-repeat从你的函数$scope.getValueTypes结果。为更详细explenation看看这fiddle(这是从角度docs太,不是我的工作=))

希望我可以帮助一下,祝你好运!

+0

这是你的小提琴,不是你的朋友.. –

+0

@IsaacKleinman righty right; o – nilsK