解决angularJS chosen列表不更新的方法

咱们都知道,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);
相关文章
相关标签/搜索