2014-04-24 58 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