咱們都知道,chosen更新值的代碼是這個javascript
$(xxx).trigger("chosen:updated");//新版 $(xxx).trigger("liszt:updated");//舊版
一般來講,若是用的是jq,那麼在append之後,直接跟上上面的代碼之後,chosen的值就會同步更新了。java
可是!可是!可是!若是用的是angular,那麼分爲兩種狀況:app
一、在當前angular的上下文中動態添加或修改了值,通常是用ng-repeat,此時在後面加上上面的代碼便可。code
二、不在當前angular的上下文中動態添加或修改了值,那麼直接在後面加上上面的代碼,是無效的!!!,由於chosen的值是根據select標籤的值來更新的,而select標籤的值是受angular的ng-repeat影響的,若是沒有把值在angular中更新的話,只在chosen中更新值是沒有任何做用的。所以,咱們在非angular的上下文中修改了值之後,須要加上下面的代碼把值在angular中更新一下:ip
$scope.$apply();
經過$timeout來解決:同步
一、首先將ng-options改成option ng-repeat,如:<option ng-repeat="m in ms" value="{{m}}">{{m}}</options>io
二、動態改變了ms了以後,加入如下代碼:function
$scope.ms = data.obj.models; $timeout(function() { $("#model_select").trigger("chosen:updated"); }, 0, false);