2015-10-07 23 views
3

我正在使用Angular Bootstrap Selectpicker模型更改後,角度自舉多選按鈕組件在選項上不顯示刻度標記

我正在使用角度版本1.4.7。 對於選擇拾取他們提供指導,

angular.module('angular-bootstrap-select', []) 
.directive('selectpicker', ['$parse', function ($parse) { 
return { 
    restrict: 'A', 
    require: '?ngModel', 
    priority: 10, 
    compile: function (tElement, tAttrs, transclude) { 
    tElement.selectpicker($parse(tAttrs.selectpicker)()); 
    tElement.selectpicker('refresh'); 
    return function (scope, element, attrs, ngModel) { 
     if (!ngModel) return; 

     scope.$watch(attrs.ngModel, function (newVal, oldVal) { 
     scope.$evalAsync(function() { 
      if (!attrs.ngOptions || /track by/.test(attrs.ngOptions)) element.val(newVal); 
      element.selectpicker('refresh'); 
     }); 
     }); 

     ngModel.$render = function() { 
     scope.$evalAsync(function() { 
      element.selectpicker('refresh'); 
     }); 
     } 
    }; 
    } 

}; 
}]); 

選擇選擇器看起來像

<select class="form-control" data-style="btn-default" 
      data-live-search="true" selectpicker multiple 
      data-selected-text-format="count>2" 
      data-collection-name="users" 
      ng-model="selectedUsers" 
      ng-options="user.name for user in users"> 
    </select> 

上述情況下,selectedUser將有刻度線,如果我從控制器selectedUsers變化值。它不會顯示更新的selectedUsers選項的刻度線。

當我選擇多個選項時,它顯示選定選項的勾號。 然後,如果我刷新視圖,然後ng模型仍然有以前的值不顯示在ng模型值的刻度線。

Plunker

+0

你能夠讓一個jsfiddle來幫助我們實現這個問題嗎? –

+0

jsFiddle進行中:) –

回答

2

我簡化你的代碼工作。檢查這Demo

.directive('selectpicker', ['$parse', selectpickerDirective]); 

function selectpickerDirective($parse) { 
    return { 
    restrict: 'A', 
    priority: 1000, 
    link: function (scope, element, attrs) { 

     //New change 
     scope.$watch(attrs.ngModel, function(n, o){ 
      element.selectpicker('val', $parse(n)()); 
      element.selectpicker('refresh'); 
     }); 

    } 
    }; 
} 
+0

如果用戶包含id,var users = [{id:1,name:'luffy'}}]會怎麼樣?我想在選擇選項中顯示名稱,整個對象將在selectedUsers.Please看到我更新的重擊。 –

+0

我已更新plunker –

+0

我已根據您的要求更改了代碼。檢查http://plnkr.co/edit/XRXYBrpjQHVg3PPlItvH –

2

EDIT 1

看這樣的:http://plnkr.co/edit/4TiSJwKtcln9z39cxHZ3?p=preview

庫自舉選是與jquery兼容,但具有角不兼容。爲此,您可以利用程序員的高級技巧。 rsrsrs。看看我的例子。我模擬元素中的用戶點擊。

angular.element("li[data-original-index='1']").find("a").click(); 

EDIT 2

更改selectpickerDirective到:

function selectpickerDirective($parse) { 
    return { 
    restrict: 'A', 
    priority: 1000, 
    link: function (scope, element, attrs) { 
     scope.$watch(attrs.ngModel, function(n, o){ 
      if(n) 
      element.selectpicker('val', ["string:" + n[0].name]); 
      element.selectpicker('refresh'); 
     }); 

    } 
    }; 
} 
+0

它顯示控制檯有關作用域$ aaply摘要的錯誤。帶有指令的解決方案會很棒 –

+0

@PrashantShilimkar look edit 2 –

相關問題