咱们都知道,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);